代码之家  ›  专栏  ›  技术社区  ›  jlembke

使用MVCContrib网格进行编辑

  •  11
  • jlembke  · 技术社区  · 16 年前

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

    是否有人向我介绍如何将行置于编辑模式的信息,或者如果该网格没有这样的内容,请讨论在MVC中编辑列表数据的最佳实践。

    2 回复  |  直到 14 年前
        1
  •  10
  •   Jordan S. Jones    16 年前

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

    但是,看起来您可以随意处理该功能。如果要转到单独的页面进行编辑模式,只需在其中一列中放置具有该行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(); %>
    

    在这里,他们似乎希望将用户引导到查看个人页面: <%= Html.ActionLink("View Person", "Show", new { id = p.Id })%> .

    祝你好运,编码愉快。

        2
  •  14
  •   Marnix van Valen    16 年前

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

    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;
    }
    

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

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

    <%= 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.")
    %>
    

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

    推荐文章