0

我有一个存储过程,我在视图中显示以进行编辑。我做了一个强类型的存储过程。当我编辑字段然后按保存按钮时,参数“cm”始终为空。它没有显示列表,而只是显示 1 条记录。

自定义模型:

public class CustomModel
    {
        public string Description { get; set; }
        public System.Data.Linq.ISingleResult<GetItems_ListResult> ItemList { get; set;}
    }

控制器的这一部分将其发送到视图:

 public ActionResult Details(int id)
 {
    var row = dataContext.Items.FirstOrDefault(x => x.ItemID == id);
    var cm = new CustomModel();
    cm.ItemList = dataContext.GetItem_List(row);
    cm.Description = row.Description;

    return View(cm);
 }

这个控制器从视图接收数据:

[HttpPost]
public ActionResult UpdateItems(CustomModel cm)
{

   return RedirectToAction("Index");
}

这是视图:

@model TestWeb.Models.CustomModel


@using (Html.BeginForm("UpdateItems", "Item", FormMethod.Post))
{

     <table>
            <tr>
                <th>Name</th>
                <th>Description</th>
            </tr>
        @foreach (var p in Model.ItemList.ToList())
        {
            <tr>
                <td>
                    @Html.HiddenFor(mdl => p.ItemId)
                </td>
                <td>@p.Name</td>
                <td>
                    @Html.EditorFor(mdl => p.Description)
                </td>
            </tr>
        }
    </table>

    <p>
        <input type="submit" value="save" />
    </p>
}

我在这里做错了什么?

4

2 回答 2

1

尝试以下操作:

做一个GetItems_ListResult.cshtml这样的:

<tr>
 <td>
    @Html.HiddenFor(mdl => mdl.ItemId)
 </td>
  <td>@Model.Name</td>
 <td>
    @Html.EditorFor(mdl => mdl.Description)
 </td>
</tr>

然后在你的 for 循环中这样做:

@for (int i = 0; i < Model.ItemList.Count(); i++)
{
   @Html.EditorFor(m => m.ItemsList[i])
}

更新:我没有注意到您使用的是 ISingleResult。你可以这样做:

//Since it'll have none or one element..
if(Model.ItemList != null  && Model.ItemList.Any())
{
  @Html.EditorFor(m => m.ItemList.First())
}
于 2012-11-29T10:20:52.800 回答
0

你读过这篇博文吗?http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ Steve 涵盖了在 asp mvc 中的编辑列表。

一旦你阅读了这个 nuget 包http://nuget.org/packages/BeginCollectionItem

于 2012-11-29T10:16:48.047 回答