我一直在研究 MVC 4 应用程序,并在尝试更新ViewModel
.
我的ViewModel
(详见下文)包含一个ComplexObjectOne
和一个List<ComplexObjectTwo>
.
我的GET ActionResult
成功地从数据库中填充,ViewModel
并且一切都正确显示在我的View
.
尝试将ComplexObjectOne
and传递List<ComplexObjectTwo>
给POST ActionResult
时遇到问题。
ComplexObject
正确传递但我尝试过的所有内容都失败了通过集合List<ComplexObjectTwo>
。
我的 ComplexModelOneModel
public class Test
{
public int Id {get;set;}
public string Result {get;set;}
public virtual ICollection<TestResult> TestResults {get;set;}
}
我的复杂模型二Model
public class TestResult
{
public int Id {get;set;}
public string Result {get;set;}
public string Comment {get;set;}
public virtual Test Test{get;set;}
}
我的ViewModel
public class TestingViewModel
{
public TestingViewModel()
{
if(TestResults == null)
{
TestResults = new List<TestResult>();
}
}
public Test Test {get;set;}
public IEnumerable<TestResult> TestResults {get;set;}
}
我的编辑()获取 ActionResult
public ActionResult Edit(int id = 0)
{
var viewModel = new TestingViewModel();
Test test = testRepo.GetTestById(id);
var results = test.TestResults;
viewModel.Test = test;
viewModel.TestResults = results;
return View(viewModel);
}
我的编辑()帖子 ActionResult
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(TestingViewModel model)
{
// do update - left out for brevity
}
我的编辑.cshtmlView
@model Namespace.Models.ViewModels.TestingViewModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.EditorFor(model => model.Test, "TestHeader")
<table>
<tr>
<th>Test</th>
<th>Result</th>
<th>Comment</th>
</tr>
@Html.EditorFor(model => model.TestResults, "TestResults")
</table>
<input type="submit" value="Update"/>
}
在我的内部View
,我确实使用了几个EditorTemplates
来显示属性字段。
任何帮助、意见或建议将不胜感激。我希望能够在单个页面上完成更新这些实体,而不是在 Create() 步骤中使用的多个页面。
谢谢,
帕特里克 H. (stpatrck)