【问题标题】:How to Post Partial View Data?如何发布部分视图数据?
【发布时间】:2012-04-06 07:44:12
【问题描述】:

任何意见都非常感谢:)

我想知道我是否可以在 MVC 中发布多个部分视图数据?(意味着我想将部分视图数据更新到 DATABASE)

示例如下:

型号:-

public class PassengerViewModel
{
    public List<PassengerModel> Passengers { get; set; }
    public ContactModel Contact { get; set; }
}

控制器:-

[RequiredAuthentication]
    public ActionResult Passenger()
    {
        var passengrViewMdl = new PassengerViewModel()
        {
            Contact = new ContactModel(),
            Passengers = psngrService.LoadPassengers(Convert.ToInt32(Session["LPORefNO"]))
        };
        return View(passengrViewMdl);
    }
    [HttpPost]
    public ActionResult Passenger(PassengerViewModel passengerViewModel)
    {
        Here i want to update Passengers & Contact information
    }

查看:-

@model QR.LPO.Core.Models.PassengerViewModel
@{
ViewBag.Title = "Add Passengers";
}
@using (Html.BeginForm())
{
@Html.Partial("_Passenger", Model.Passengers);
@Html.Partial("_PassengerContact", Model.Contact);
<input type="submit" value="Submit" />
}

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    是的,确实可以,但是控制器通常每个请求只使用一个模型,因此您的模型应该在其中声明两个部分子模型或子模型本身的属性。

    由于 HTML 规范,这是可能的,表单上所有具有提交按钮的数据都发送到提交操作 url。

    【讨论】:

      【解决方案2】:

      这几乎可以按照你的方式工作 - 没有任何固有的部分可以阻止这种情况,最终输出的 html 才是最重要的。

      您的代码的问题在于,您的_Passenger 视图的模型可能是Passengers 类型,而您的_PassangerContact 视图的模型是Contact 类型。这意味着如果您使用标准的HtmlHelper 扩展(如Html.Textbox(...)Html.TextboxFor(...),它们生成的字段将不会有像Contact.Name 这样的全名,而只是与其模型相关的名称,如Name。这个将导致模型绑定在您的发布操作中失败。

      您可以通过多种方式解决此问题。

      1. 只需在子视图中使用相同的模型类型 (PassengerViewModel),并编写类似 @Html.TextboxFor(m =&gt; m.Contact.Name) 的代码。

      2. 不要使用Html.Partial,而是使用Html.EditorFor(...)。这会将正确的前缀信息传递到子视图中,以便正确生成字段名称。

      3. 自己显式设置前缀

      像这样:

      @{
          var childViewData = new ViewDataDictionary(this.ViewData);
          childView.TemplateInfo.HtmlFieldPrefix = "Contact";
      }
      @Html.Partial("_PassengerContact", Model.Contact, childViewData)
      

      您还可以查看自己创建 Html.PartialFor 重载,如以下 stackoverflow 问题所述:ASP.NET MVC partial views: input name prefixes

      【讨论】:

        猜你喜欢
        • 2019-11-06
        • 2013-01-06
        • 1970-01-01
        • 2018-09-26
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多