如何仅更新已编辑的List中的实体

时间:2013-12-21 11:48:00

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

我正在处理ASP.NET MVC4申请。我有类型为Page的强类型视图,其中Page

public class Page
{
    public Page()
    {
        Date = DateTime.Now;
    }
    public int PageID { get; set; }
    public string Title { get; set; }
    public DateTime Date { get; set; }
    public virtual List<Document> Documents { get; set; }
}

我这样渲染我的观点:

<tbody>
    @for (int i = 0; i < Model.Page.Documents.Count; i++)
    {
        <tr>
            <td>@Html.TextBoxFor(m => Model.Page.Documents[i].Name)</td>
            <td>@Html.DisplayFor(m => Model.Page.Documents[i].FileName)</td>
            <td><a href="@Url.Action("Delete", new { docId = Model.Page.Documents[i].DocumentID, PageID = Model.Page.PageID })"><img src="/Content/Images/delete.png", alt="Delete" /></a></td>
        </tr>
    }
</tbody>

这产生的是这样的: Generated table

所以我想知道如何应用对Name属性所做的任何更改。我能想到的只是使整个表格在@Html.BeginForm()中呈现,然后在提交时迭代文档并更新它们,无论它们是否被编辑。我不会使用大型列表,所以这是一个选项,但我想要想到比这更好的东西。 P.S 我正在使用Entity Framework 5代码优先。

1 个答案:

答案 0 :(得分:1)

将一个布尔属性“IsEdited”添加到ViewModel.By默认值为false。 在“名称”文本框所在的位置内渲染隐藏字段。

<td>@Html.TextBoxFor(m => Model.Page.Documents[i].Name)@Html.HiddenFor(m=>Model.Page.Documents[i].IsEdited)</td>

现在“更改”“名称”文本框,将相应隐藏字段的值设置为“true”。 现在开始发布,过滤掉那些“IsEdited = false”

的模型
var editedDocuments=models.Where(x=>x.IsEdited)