[英]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循環中的停止條件更改為所需的計數。
請記住,此主題之前已多次討論過:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.