批量编辑ISingleResult

时间:2012-11-29 09:37:16

标签: c# asp.net-mvc edit

我有一个存储过程,我在视图中显示进行编辑。我做了一个强大的存储过程类型。当我编辑字段然后按保存按钮时,参数“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>
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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())
}

答案 1 :(得分: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