微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc – MVC4部分视图没有将值加载到“容器”模型中

所以我想创建一个可重用的视图来编辑地址,电话号码等.

我设置了一个包含所有需要的模型的容器模型.
创建部分视图来处理地址部分
e形式

但是当它返回到控制器时,客户数据就在主页面,但部分视图中的任何内容都不存在(使用MVC4 / Razor)

集装箱模型

public class Customerviewmodel {
    public Customer CustomerData { get; set; }
    public Address MainAddress { get; set; }
    public Address ShippingAddress { get; set; }
    public Phone MainPhone { get; set; }
    public Phone Fax { get; set; }
}

控制器:

public ActionResult Edit(int id = 0) {
    Customerviewmodel model = new Customerviewmodel();
    model.CustomerData = Customer.FetchById(id);
    if (model.CustomerData == null) return HttpNotFound();

    //... load addresses,phones

    return View(model);
}

[HttpPost]
public ActionResult Edit(Customerviewmodel model) {
    if (ModelState.IsValid) {
        ///... save everything here - model has CustomerData,but nothing else
    }

    return View(model);
}

主视图:

@model ProjectName.WebSite.Models.Customerviewmodel

.....

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Customer</legend>
        @Html.HiddenFor(model => model.ModelCustomer.CustomerId)

        <div class="editor-label">
            @Html.LabelFor(model => model.ModelCustomer.CompanyName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ModelCustomer.CompanyName)
            @Html.ValidationMessageFor(model => model.ModelCustomer.CompanyName)
        </div>

        ...        

        @Html.Partial("Address",Model.MainAddress,new ViewDataDictionary {
            TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Main" }
        })

        ...        

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}
.....

地址部分视图:

@model ProjectName.Business.Address

<fieldset style="margin-top:  20px;">
    <legend>@(ViewData["label"] ?? "Address")</legend>

    @Html.HiddenFor(model => model.AddressId)

    <div class="editor-label">
        @Html.LabelFor(model => model.Street)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Street)
        @Html.ValidationMessageFor(model => model.Street)
    </div>
    ...
</fieldset>

在这里做错了什么 – 为什么我不能从部分视图中获取模型?

解决方法

解决了!我想到了!睡不着,只是绊倒了!

在视图中,您必须确保HtmlFieldPrefix使用与您的组合模型类中相同的名称,因此,由于我将两个地址命名为“MainAddress”和“ShippingAddress” – 只需确保在设置时使用相同的名称部分:

@Html.Partial("Address",new ViewDataDictionary(Html.ViewDataContainer.ViewData) {
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "MainAddress" }
})

@Html.Partial("Address",Model.ShippingAddress,new ViewDataDictionary(Html.ViewDataContainer.ViewData) {
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ShippingAddress" }
})

原文地址:https://www.jb51.cc/aspnet/245751.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐