gpt4 book ai didi

c# - 如何将数据从多个模型传递到 View ?

转载 作者:行者123 更新时间:2023-11-30 21:35:20 25 4
gpt4 key购买 nike

我有3个模型

学生

public class Student
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; } //primary key


[RegularExpression(@"^[ A-Za-z]*$", ErrorMessage = "Only Alphabet allowed")]
[Required] //Because you can't leave this field empty
public string Name { get; set; }

[RegularExpression(@"^[ A-Za-z]*$", ErrorMessage = "Only Alphabet allowed")]
[Required]
public string LastName { get; set; }

[RegularExpression(@"^(\d{1,3})/\d{4}$", ErrorMessage = "Format has to be 1-3digit number/year; example 100/2015")]
[Required]
public string BI { get; set; }

}

主题

public class Subject
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

[RegularExpression(@"^[ A-Za-z0-9]*$", ErrorMessage = "Only Alphabet and numbers allowed")]
[Required]
public string SubjectName { get; set; }
}

考试

public class Exam
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

public int StudentID { get; set; }

public int SubjectID { get; set; }

[Range(6, 10)]
public int Grade { get; set; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime EnrollmentDate { get; set; }
}

View 模型

public class ViewModel
{
public Student Students;
public IEnumerable<Exam> Exams;
public IEnumerable<Subject> Subjects;

}

我想将数据从 StudentsController 传递到 edit.cshtml,以便能够从下拉菜单中编辑 SubjectName 和 Grade。我还从这 3 个创建了 ViewModel,并包含了 ViewModel。我只是不知道如何将 ViewModel 从 Controller 传递到 View 。有什么想法吗?

Controller 编辑

        public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var student = await _context.Student.SingleOrDefaultAsync(m => m.ID == id);
if (student == null)
{
return NotFound();
}
return View(student);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ID,Name,LastName,BI,SubjectName,Grade")] ViewModel student)
{
if (id != student.Students.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(student);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!StudentExists(student.Students.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(student);
}

最佳答案

我认为 viewmodel 应该只包含您要在该 view 上使用的属性,而不是整个 model

但是你可以像这样传递一个ViewModel:

public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var student = await _context.Student.SingleOrDefaultAsync(m => m.ID == id);
if (student == null)
{
return NotFound();
}
ViewModel model = new ViewModel();
model.Student = student;
return View(model);
}

然后在您的 edit.cshtml 上,您需要 @model namespace.ViewModel

然后在你的 Post 方法上你也应该使用你的 ViewModel 而不是 Bind:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, ViewModel model)
{
(...)
}

关于c# - 如何将数据从多个模型传递到 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49300894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com