簡體   English   中英

ASP.NET MVC 5模型綁定列表為空

[英]ASP.NET MVC 5 model binding list is empty

我堅持這個問題一段時間..

我創建了一個簡單的視圖模型:

public class AddTranslationViewModel
{
    public List<ProjectTranslation> ProjectTranslations { get; set; }
    public AddTranslationViewModel()
    {
        ProjectTranslations = new List<ProjectTranslation>();
    }
}

ProjectTranslation類:

public class ProjectTranslation
{
    public int ProjectTranslationId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Address { get; set; }

    public int LanguageId { get; set; }
    public Language Language { get; set; }

    public int ProjectId { get; set; }
    public Project Project { get; set; }

}

一個使用AddTranslationViewModel的簡單視圖

<table class="table">

    @foreach (var item in Model.ProjectTranslations)
    {
        @Html.HiddenFor(modelItem => item.ProjectTranslationId)
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Language.LanguageCode)
            </td>
            <td>
                @Html.EditorFor(modelItem => item.Title)
            </td>
        </tr>
    }

</table>
<input type="submit" value="Send" />

最后我的POST方法:

    public ViewResult AddTranslation(AddTranslationViewModel projectTranslations)
    {
        if (ModelState.IsValid)
        {
           //...
        }
        return View(projectTranslations);
    }

這個想法非常基礎,我想展示一個可以更改/編輯值的項目列表。

但是,模型綁定不起作用,HTTPPost-Method AddTranslation中的projectsTranslations參數始終為空。

這里的錯誤是什么?

綁定到對象列表需要創建包含索引的名稱的輸入字段結構,即:

<input type="text" name="YourArrayOrList[0].SomeProperty" value="123" />
<input type="text" name="YourArrayOrList[0].SomeOtherProperty" value="321" />
<input type="text" name="YourArrayOrList[1].SomeProperty" value="123" />
<input type="text" name="YourArrayOrList[1].SomeOtherProperty" value="321" />

此外,您需要使用Razor的Html.BeginFrom方法將窗體指向Controller中的正確Action方法( 請參閱文檔 )。 在你的情況下它應該是這樣的:

@using(Html.BeginForm("AddTranslation","YourControllerName"))
{
    for (int i=0;i<Model.ProjectTranslations.Count; i++)
    {
        @Html.HiddenFor(model => model.ProjectTranslations[i].ProjectTranslationId)
        <tr>
            <td>
                @Html.DisplayFor(model => model.ProjectTranslations[i].Language.LanguageCode)
            </td>
            <td>
                @Html.EditorFor(model => model.ProjectTranslations[i].Title)
            </td>
        </tr>
    }
}

如果你的方法不是編輯,而是CREATE方法,那么顯然你的模型中的List將有0個元素。 在這種情況下,將for循環中的停止條件更改為所需的計數。

請記住,此主題之前已多次討論過:

ASP.NET MVC在模型中綁定數組

ASP.NET MVC - 無法綁定數組以查看模型

暫無
暫無

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

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