C# 从PartialView MVC4获取数据
我正在使用ASP.NETMVC4,我一直在研究如何从局部视图中获取信息。 我的意思是我有一个我的视图模型C# 从PartialView MVC4获取数据,c#,asp.net-mvc-4,razor,partial-views,C#,Asp.net Mvc 4,Razor,Partial Views,我正在使用ASP.NETMVC4,我一直在研究如何从局部视图中获取信息。 我的意思是我有一个我的视图模型 public class ShowHomeViewModel { public int ID_ClientTypeID { get; set; } public string ReservationDate { get; set; } public short ClientNum { get; set; } public string Clie
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中的所有de数据,它显示得很好,问题是当我尝试从视图中恢复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);
}
我真的被困在这里了,提前感谢您的帮助这里的问题是您的表单数据无法绑定到ShowHomeViewModel。这是因为渲染局部模型时,模型的上下文已更改,模型上下文已从ShowHomeViewModel更改为HomeViewModel。MVC使用约定来绑定属性。默认情况下,如果您愿意,您可以创建自己的模型绑定器,它使用您想要绑定的任何方法。默认情况下,当您为模型的属性生成编辑器时,MVC将适当地命名表单字段,以便可以将其绑定回从中创建的模型上下文 因此,如果跳过该部分,您可以在父视图中运行foreach,并且您可能仍然可以绑定到ShowHomeViewModel,因为它将对表单字段进行如下命名:
<input name="ReservedHuts_HutId">
<input name="HutId">
但是,如果使用分部并更改模型上下文,它将呈现相同的输入,如下所示:
<input name="ReservedHuts_HutId">
<input name="HutId">
因此,MVC在默认情况下无法将HutId的值绑定到ShowHomeViewModel,因为HomeViewModel上没有名为HutId的属性,但有HutId属性,因此它将成功绑定 您的PartialView需要在正在发回的表单中呈现。是这样吗?发布一些呈现的html。如果您希望异步返回服务器以获得新方法,则必须使用AJAXShow向我们显示您的部分视图。。。在那里,我们应该看到您对列表做了什么,以及表单是否正常。@model IEnumerable@{SelectListItem[]TimeRes=ViewBag.TimeRes;var m=model;}foreach var m in model{@Html.HiddenFormit=>m.ID\u ClientTypeID@Html.DisplayFormodelItem=>m.Hut\u Number@Html.DisplayFormodelItem=>m.ClientName..etci四处寻找一篇更深入的文章。这篇很好: