我正在使用MVC3剃须刀.我有一个场景,我必须在同一父视图上多次使用局部视图.我遇到的问题是,当父视图被渲染时,它会在这些部分视图中生成相同的名称和输入控件的ID.由于我的部分视图被绑定到不同的模型,当视图回发到“保存”时它崩溃了.任何想法我如何使控件ID /名称唯一,可能有些人如何前缀?
等待
纳比勒
解决方法
我个人更喜欢使用编辑器模板,因为他们会照顾这个.例如,您可以使用以下视图模型:
public class Myviewmodel { public Childviewmodel Child1 { get; set; } public Childviewmodel Child2 { get; set; } } public class Childviewmodel { public string Foo { get; set; } }
和以下控制器:
public class HomeController : Controller { public ActionResult Index() { var model = new Myviewmodel { Child1 = new Childviewmodel(),Child2 = new Childviewmodel(),}; return View(model); } [HttpPost] public ActionResult Index(Myviewmodel model) { return View(model); } }
并在Index.cshtml视图中:
@model Myviewmodel @using (Html.BeginForm()) { <h3>Child1</h3> @Html.EditorFor(x => x.Child1) <h3>Child2</h3> @Html.EditorFor(x => x.Child2) <input type="submit" value="OK" /> }
最后一部分是编辑器模板(〜/ Views / Home / EditorTemplates / Childviewmodel.cshtml):
@model Childviewmodel @Html.LabelFor(x => x.Foo) @Html.EditorFor(x => x.Foo)
使用EditorFor您可以包含主视图模型的不同属性的模板,并生成正确的名称/ ID.除此之外,您还可以在POST操作中正确填充视图模型.