动态模型列表在回发后没有绑定

时间:2015-03-07 21:26:53

标签: c# asp.net-mvc asp.net-mvc-4

我是MVC的新手,我正试图弄清楚如何绑定动态列表。

我按照此example和其他示例中的说明创建了我的表格。新项目已成功添加到表格中。但是,在回发时,只有最初添加到列表中的默认项目可用,没有新项目。

这些是我的模特:

 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"]);
    }

有些人可以告诉我我做错了吗?

感谢。

1 个答案:

答案 0 :(得分:0)

每次调用public ActionResult Add()时,您可能正在创建一个新的空项。然后设置其Id,然后将其添加到会话中的模型。 “名称”和“描述”属性未设置。

要添加页面中添加的项目,您必须将数据回发到Add()方法中的参数 - 否则没有数据要添加到您的项目中。

此外,传回数据的最后一块:

return PartialView("Item", Session["MainModel"]);

将其强制转换为MainModel可能更好:

(MainModel)Session["MainModel"]