Используйте сетку MVCContrib для редактирования

Я только начал использовать сетку MVCContrib в тестовом проекте. Мне сложно найти информацию о том, как использовать его для редактирования/обновления/удаления.

Может ли кто-нибудь указать мне информацию о том, как поместить строку в режим редактирования или если в этой сетке нет такой вещи, обсудите наилучшую практику для редактирования данных списка в MVC.

Ответ 1

Похоже, MVCContrib - это простой способ построить таблицу HTML из коллекции объектов модели. Он не выглядит так, как если бы он имел возможность помещать строку в режим редактирования/обновления/удаления, аналогичный WebForms GridView.

Однако, похоже, что вы можете обрабатывать эту функциональность, как хотите. Если вы хотите перейти на отдельную страницу для режима редактирования, просто поместите ссылку в один из столбцов с этим идентификатором строки. Ниже взято следующее: 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 })%>.

Удачи и счастливого кодирования.

Ответ 2

Вы можете добавить рендеринг режима редактирования, настроив способ отображения ячейки. Я использую следующий метод расширения:

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

Вы можете использовать один и тот же шаблон для визуализации ссылок действий (редактировать, применять, отменить и т.д.) в ячейке. Если вы хотите редактировать сразу несколько строк, убедитесь, что имена полей уникальны.