12

我刚开始在一个测试项目中使用 MVCContrib 网格。我很难找到有关如何使用它进行编辑/更新/删除的信息。

任何人都可以向我指出有关如何将行置于编辑模式的信息,或者如果该网格没有这样的东西,请讨论在 MVC 中编辑列表数据的最佳实践。

4

2 回答 2

14

您可以通过自定义单元格的呈现方式来添加编辑模式呈现。我正在使用以下扩展方法:

public static IGridColumn<T> Action<T>( this IGridColumn<T> column, Func<T, string> viewAction, Func<T, string> editAction, Func<T,bool> editMode )
{
   column.CustomItemRenderer = ( context, item ) => context.Writer.Write( "<td>" + ( editMode( item ) ? editAction( item ) : viewAction( item ) ) + "</td>" );
   return column;
}

这允许您指定列在视图模式和编辑模式下的呈现方式。模式是使用第三个操作确定的,对于您要编辑的行,该操作应该评估为真。

在视图中使用它看起来像这样:

<%= Html.Grid( Model.Items ).Columns( column => {
     column.For( x => x.Name ).Action(
        item => Html.ActionLink( item.Name, "SomeAction" ), 
        item => Html.TextBox( "Item.Name", item.Name ),
        item => ( Model.SelectedItem == item ) );
    } )
    .Empty("No items found.")
%>

您可以使用相同的模式在单元格中呈现操作链接(编辑、应用、取消等)。如果要一次编辑多行,请确保字段名称是唯一的。

于 2009-06-16T16:23:56.753 回答
10

看起来 MVCContrib 是一种从模型对象集合构造 HTML 表的简单方法。它似乎没有任何能力将一行置于类似于 WebForms GridView 的编辑/更新/删除“模式”。

但是,看起来您可以随心所欲地处理该功能。如果您想转到单独的页面进行编辑模式,只需将链接放在具有该行 ID 的列中。以下内容直接取自: http: //www.jeremyskinner.co.uk/2009/03/01/mvccontrib-grid-part-5-the-action-syntax/

<% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id).Named("Person ID");
            column.For(x => x.Name);
            column.For(x => x.Gender);
            column.For(x => x.DateOfBirth);
                column.For("View Person").Named("").Action(p => { %>
                     <td style="font-weight:bold">
                    <%= Html.ActionLink("View Person", "Show", new { id = p.Id })%>
                 </td>
                <% });
        }).RowStart((p,row)  => {     
             if (row.IsAlternate) { %>
                   <tr style="background-color:#CCDDCC">
             <%  }  else  { %>
                 <tr>
             <% }
    }).Render(); %>

在这里,他们似乎想要将用户定向到 View Person 页面:<%= Html.ActionLink("View Person", "Show", new { id = p.Id })%>

祝你好运,编码愉快。

于 2009-05-06T00:18:11.977 回答