簡體   English   中英

從PartialView MVC4獲取數據

[英]get data from PartialView MVC4

我正在使用(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; }
}

我有一個局部視圖,其中顯示了HomeViewModel的所有數據,顯示效果很好,問題是當我嘗試從視圖中恢復ReservedHuts列表時:

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

在我的視圖中,我顯示了列表並更改了一些數據,但是當我單擊按鈕並轉到“ New Method”下面時,結果表明ReservedHuts(HomeViewModel的列表)為null

[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">

但是,如果您使用partial並更改模型上下文,它將呈現相同的輸入,如下所示:

<input name="HutId">

因此,MVC不能(默認)綁定的值HutIdShowHomeViewModel因為沒有所謂的財產HutId (但對HomeViewModel HutId屬性,所以它會成功綁定!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM