私は MVC 4 アプリケーションに取り組んでおり、ViewModel
.
My ViewModel
(詳細は後述) には oneComplexObjectOne
と aが含まれますList<ComplexObjectTwo>
。
私のGET はデータベースから をActionResult
正常に取り込み、すべてが my に正しく表示されます。ViewModel
View
ComplexObjectOne
andList<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;}
}
私のComplexModelTwoModel
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;}
}
私の Edit() GET 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);
}
私の Edit()投稿 ActionResult
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(TestingViewModel model)
{
// do update - left out for brevity
}
私のEdit.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)