我遇到了以下问题,当我尝试在我的控制器方法中绑定模型时,嵌套模型没有绑定(输入名称不匹配,因为它在局部视图中使用)。
让我用代码示例说明问题:
控制器:
public class TestController : Controller
{
public ActionResult Create()
{
var model = new Test2();
model.Basisgegevens.Name = "Test";
model.Basisgegevens.Omschrijving = "Omschrijving";
return View(model);
}
[HttpPost]
public ActionResult Create(Test2 model)
{
return View(model);
}
}
型号:
public class Test
{
public string Name { get; set; }
public string Omschrijving { get; set; }
}
public class Test2
{
public Test2()
{
this.Basisgegevens = new Test();
}
public int PeriodeVanId { get; set; }
public int PeriodeTotId { get; set; }
public Test Basisgegevens { get; set; }
}
查看:
@model WebApplication4.Models.Test2
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Test2</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.PeriodeVanId, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PeriodeVanId)
@Html.ValidationMessageFor(model => model.PeriodeVanId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PeriodeTotId, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PeriodeTotId)
@Html.ValidationMessageFor(model => model.PeriodeTotId)
</div>
</div>
@Html.Partial("~/Views/Test/Partials/Naam.cshtml", Model.Basisgegevens)
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
部分观点:
@model WebApplication4.Models.Test
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Omschrijving, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Omschrijving)
@Html.ValidationMessageFor(model => model.Omschrijving)
</div>
</div>
部分视图中使用的模型'Test'由另一个控制器使用,因此我无法更改输入字段名称(以允许绑定)。
这是发送到服务器: PeriodeVanId:0 PeriodeTotId:0 名称:测试 Omschrijving:Omschrijving
我希望底层2个属性(来自嵌套模型)在控制器级别的模型绑定中重命名为: Basisgegevens.Name Basisgegevens.Omschrijving
这将允许绑定,然后模型验证正确启动。
有没有人知道这个简单的模型绑定问题的解决方案?
答案 0 :(得分:0)
您需要将partial渲染为编辑器。使用以下
@Html.EditorFor(model => model.Basisgegevens, "~/Views/Test/Partials/Naam.cshtml")
这将正确命名输入,以便它们应该绑定。基本上它告诉剃刀,部分是形式不是无关内容的一部分
答案 1 :(得分:0)
对我来说,当我使用Html.EditorFor并在文件夹EditorTemplates下移动部分视图时,它可以正常工作。
您需要创建文件夹EditorTemplates的两个选项:
在MVC 5应用程序上测试。