为了说明我面临的问题,我整理了三个简单的数据模型:
public class PersonalModel {
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class AddressModel {
public string Street { get; set; }
}
public class OverallModel {
public string Id { get; set; }
public PersonalModel Personal { get; set; }
public AddressModel Address { get; set; }
}
这是我的简单 Index.html:
@model WebAppTest.Models.OverallModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>OverallModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div>
@Html.Partial("Personal", Model.Personal)
</div>
<div>
@Html.Partial("Address", Model.Address)
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
单击“保存”按钮时,将调用以下控制器方法:
[HttpPost]
public ActionResult Index(OverallModel model) {
return View(model);
}
我的问题是model.Personal
and model.Address
值在控制器方法中始终显示为 null。
尽管值已正确传递到部分视图,但单击“提交”时,Razor 引擎无法将整个对象重新组合在一起。
如果您能告诉我我缺少什么,我将不胜感激。问候。
通过OverallModel
到您的部分,以便控件将被正确命名以便回发到OverallModel
。目前您可以使用以下控件进行控制name="FirstName"
但他们需要name="Personal.FirstName"
@Html.Partial("Personal", Model)
并更改部分以适应
@model OverallModel
....
@Html.TextBoxFor(m => m.Personal.FirstName)
作为替代方案,您还可以将前缀传递给部分
@Html.Partial("Address", Model.Personal, new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "Personal" }})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)