[英]Dynamic Model list not binding on post back
我是MVC的新手,正在嘗試弄清楚如何綁定動態列表。
我按照本示例和其他示例中的說明進行操作,以創建我的表。 新項目已成功添加到表中。 但是,在回發時,只有最初添加到列表中的默認項目可用,沒有新項目。
這些是我的模型:
public class ItemModel {
public int ID { get; set; }
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
}
public class MainModel{
public List<ItemModel> Items { get; set; }
public MainModel(){
Items = new List<ItemModel>()
}
}
我的觀點:
<table id="list">
<thead>
<tr>
<th style="width: 150px;">
@Html.DisplayNameFor(model => model.Items[0].Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Items[0].Description)
</th>
<th>
Delete
</th>
</tr>
</thead>
<tbody>
@Html.Partial("Item", Model)
</tbody>
</table>
部分視圖:
@for (var i = 0; i < Model.Items.Count; i++) {
<tr>
<td>
@Html.TextBoxFor(model => model.Items[i].Name)
</td>
<td>
@Html.TextBoxFor(model => model.Items[i].Description)
</td>
<td>
<button class="btn" type="button" data-id="@Model.Items[i].ID" value="Delete"/>
</td>
</tr>
}
我正在使用Ajax Post將新項目添加到表中:
$('.add').click(function () {
var action = "/Project/Add";
$.ajax({
url: action,
cache: false,
success: function (result) {
$("#list").find("tbody").empty().append($(result));
}
});
});
控制器動作:
public ActionResult Add() {
ItemModel item = new ItemModel();
try {
item.ID = ((MainModel)Session["MainModel"]).Items.LastOrDefault().ID + 1;
((MainModel)Session["MainModel"]).Items.Add(item);
} catch (Exception) {
return Json(null);
}
return PartialView("Item", Session["MainModel"]);
}
可以告訴我我在做什么錯嗎?
謝謝。
可能是每次調用public ActionResult Add()
時都在創建一個新的空項目。 然后設置其ID,然后將其添加到會話模型中。 名稱和描述屬性未設置。
要添加添加到頁面中的項目,必須將數據回發到Add()方法中的參數-否則,沒有數據可添加到項目中。
同樣,傳遞數據的最后一部分:
return PartialView("Item", Session["MainModel"]);
最好將其強制轉換為MainModel:
(MainModel)Session["MainModel"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.