如何持久化传递给局部视图的数据模型?

2024-05-12

为了说明我面临的问题,我整理了三个简单的数据模型:

 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(使用前将#替换为@)

如何持久化传递给局部视图的数据模型? 的相关文章

随机推荐