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

Не await в цикле for. Если вы хотите улучшить пропускную способность, используйте Array.prototype.map() и Promise.all() для одновременного подключения к каждому хранилищу и запроса ваших данных. Наконец, используйте Array.prototype.flat() , чтобы распределить каждый из результатов в одномерный массив объектов, который возвращается из коллекции результатов запроса.

async getExportData() {
  const queryResults: Object[][] = await Promise.all(
    Array.from(this.mongoRepositories).map(async ([key, repo]) => {
      await repo.connect();
      const queryResult: Object[] = await repo.getData();
      repo.close();
      return queryResult;
    })
  );
  return queryResults.flat();
}

12
задан jlembke 5 May 2009 в 23:32
поделиться

2 ответа

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

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

Хорошо удачи и счастливого кодирования.

10
ответ дан 2 December 2019 в 06:27
поделиться

You can add edit mode rendering by customizing the way a cell is rendered. I'm using the following extension method:

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

This allows you to specify how the column is rendered in view-mode and in edit-mode. The mode is determined using a third action that should evaluate to true for the row you want to edit.

Using this in a view would look something like this:

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

You can use the same pattern to render action links (edit, apply, cancel etc.) in a cell. If you want to edit multiple rows at once, make sure the field names are unique.

14
ответ дан 2 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: