从PartialView MVC4获取数据
本文关键字:数据 获取 MVC4 PartialView | 更新日期: 2023-09-27 17:50:21
我正在与(ASP)合作。Net MVC4),我被困在如何从部分视图获取信息。我的意思是我有一个viewmodel
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; }
}
我有一个局部视图,我显示所有de数据从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);
}
我真的被卡在这里了,提前谢谢你的帮助
这里的问题是您的表单数据不能绑定到ShowHomeViewModel
。这是因为当你渲染你的局部时,Model的上下文发生了变化(模型上下文从ShowHomeViewModel变成了HomeViewModel)。默认情况下,MVC使用约定来绑定属性(如果您愿意,您可以创建自己的模型绑定器,它使用您想要绑定的任何方法)。默认情况下,当你将EditorFor
作为模型的属性时,MVC将为窗体字段命名,以便它可以被绑定到创建它的模型上下文。
所以如果你跳过部分,你可以在父视图中运行foreach,你可能仍然可以绑定到ShowHomeViewModel
因为它会像这样命名表单字段
<input name="ReservedHuts_HutId">
但是,如果您使用部分并更改模型上下文,它将呈现如下相同的输入:
<input name="HutId">
所以,MVC不能(默认情况下)绑定HutId
的值到ShowHomeViewModel
,因为没有属性称为HutId
(但有HutId属性在HomeViewModel,所以它将绑定成功!)