Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从PartialView MVC4获取数据_C#_Asp.net Mvc 4_Razor_Partial Views - Fatal编程技术网

C# 从PartialView MVC4获取数据

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

我正在使用ASP.NETMVC4,我一直在研究如何从局部视图中获取信息。 我的意思是我有一个我的视图模型

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四处寻找一篇更深入的文章。这篇很好: