【问题标题】:get data from PartialView MVC4从 PartialView MVC4 获取数据
【发布时间】:2014-03-14 00:06:31
【问题描述】:

我正在使用 (ASP.Net MVC4),但我不知道如何从局部视图中获取信息。 我的意思是我有一个我的视图模型

public class ShowHomeViewModel
{
    public int ID_ClientTypeID { get; set; }
    public string ReservationDate { get; set; }
    public short ClientNum { get; set; }
            public string ClientPhone { get; set; }

    public List<HomeViewModel> ReservedHuts { get; set; }
}

我有一个局部视图,我在其中显示来自 HomeViewModel 的所有数据,它显示得很好,问题是当我尝试从视图中恢复 ReservedHuts 列表时:

@model HutReservation.ViewModel.ShowHomeViewModel
    <table>
        <tr>
            @{Html.RenderPartial("_Reservations", Model.ReservedHuts);}
        </tr>
    </table>

在我看来,我显示了列表并更改了一些数据,但是当我单击按钮并转到下面的新方法时,结果发现 ReservedHuts(HomeViewModel 的列表)为空

[HttpPost] //cambiar la pagina para el partial view
    public ActionResult New(ShowHomeViewModel vm) // <- this vm is null
    {

        foreach (HomeViewModel hvm in vm.ReservedHuts)
        {

        }
        return View("ConfirmNew", vm);
    }

我真的卡在这里,提前感谢您的帮助

【问题讨论】:

  • 您的 PartialView 需要在回发的表单中呈现。是这样吗?发布一些渲染的 html。
  • 如果您想异步返回服务器以访问您的 New 方法,则必须使用 AJAX
  • 向我们展示您的部分视图...在那里我们应该看到您对列表做了什么以及您的表单是否正常。
  • @model IEnumerable&lt;HutReservation.ViewModel.HomeViewModel&gt; @{ SelectListItem[] TimeRes = ViewBag.TimeRes; var m = Model; } foreach (var m in Model) { &lt;td id="Hut_@m.Hut_Number" class="@m.TimeReserve"&gt; @Html.HiddenFor(mit =&gt; m.ID_ClientTypeID) &lt;div style="text-align: center"&gt; @Html.DisplayFor(modelItem =&gt; m.Hut_Number) &lt;/div&gt; &lt;hr /&gt; &lt;div&gt; @Html.DisplayFor(modelItem =&gt; m.ClientName) &lt;/div&gt; &lt;/td&gt; ..etc

标签: c# asp.net-mvc-4 razor partial-views


【解决方案1】:

这里的问题是你的表单数据不能绑定到ShowHomeViewModel。这是因为在渲染局部模型时模型的上下文发生了变化(模型上下文已从 ShowHomeViewModel 更改为 HomeViewModel)。 MVC 默认使用约定来绑定属性(如果您愿意,您可以制作自己的模型绑定器,它使用您想要绑定的任何方法)。默认情况下,当您将 EditorFor 设置为模型的属性时,MVC 会将表单字段命名为适当的名称,以便可以将其绑定回创建它的模型上下文。

所以如果你跳过部分,你可以在父视图中运行你的 foreach,你可能仍然可以绑定到ShowHomeViewModel,因为它会像这样命名表单字段:

<input name="ReservedHuts_HutId">

但是,如果您使用部分并更改模型上下文,它将呈现相同的输入,如下所示:

<input name="HutId">

所以,MVC 不能(默认)将HutId 的值绑定到ShowHomeViewModel,因为没有名为HutId 的属性(但是HomeViewModel 上有HutId 属性,所以它会绑定成功!)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
相关资源
最近更新 更多