为了说明我面临的问题,我将三个简单的数据模型放在一起:
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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我简单的Index.chtml:
@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>
}
Run Code Online (Sandbox Code Playgroud)
单击"保存"按钮时,将调用以下控制器方法:
[HttpPost]
public ActionResult Index(OverallModel model) {
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,model.Personal和model.Address值始终显示在控制器的方法为空.
虽然这些值正确地传递给局部视图,但是当单击提交时,Razor引擎无法将整个对象重新组合在一起.
如果你能告诉我我失踪的是什么,我将不胜感激.问候.
小智 9
传递OverallModel给您的部分,以便正确命名控件以便回发OverallModel.目前你会有控件,name="FirstName"但他们需要name="Personal.FirstName"
@Html.Partial("Personal", Model)
Run Code Online (Sandbox Code Playgroud)
并改变部分以适应
@model OverallModel
....
@Html.TextBoxFor(m => m.Personal.FirstName)
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您也可以将前缀传递给partial
@Html.Partial("Address", Model.Personal, new ViewDataDictionary { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "Personal" }})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |