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