Каков наилучший способ реализации встроенного DropDownList с использованием MVCGrid.net?

Я использую MVCGrid.net ( http://mvcgrid.net/). У меня есть сетка предметов. Скажем, модель представления для моего элемента выглядит следующим образом:

public class ItemViewModel
{
    public string ItemNumber { get; set; }
    public string ItemStateId { get; set; }
}

Я хотел бы иметь возможность изменить состояние элемента из сетки, используя раскрывающийся список. Я думаю, что у меня есть хорошее решение для этого, используя API, который доступен. Я просто хочу убедиться, что это лучший подход. Я собираюсь сделать выпадающий список с помощью кода ниже. Затем создайте обработчик события jquery для события change для ItemStateSelector для обработки фактического изменения состояния элемента с помощью запроса ajax. Помимо проблемы с производительностью получения доступных состояний для каждого элемента в результате запроса, является ли это лучшим решением проблемы?

public static void RegisterGrids()
{
    MVCGridDefinitionTable.Add("ItemsGrid", new MVCGridBuilder<ItemViewModel>()
        .WithAuthorizationType(AuthorizationType.AllowAnonymous)
        .AddColumns(cols =>
        {
            cols.Add("ItemNumber")
                .WithHeaderText("Item #")
                .WithValueExpression(p => p.ItemNumber);
            cols.Add("ItemStateId")
                .WithHeaderText("Status")
                .WithValueExpression(p => GetItemStatusValueExpression(p.ItemStateId))
                .WithValueTemplate("{Value}", false);
        })
        .WithRetrieveDataMethod(context =>
        {
            var options = context.QueryOptions;
            int totalRecords;
            var items = SearchManager.SearchItems(out totalRecords, options);

            return new QueryResult<ItemViewModel>
            {
                Items = items.ToList(),
                TotalRecords = totalRecords
            };
        })
    );
}

private static string GetItemStatusValueExpression(int itemStateId)
{
    var states = ItemManager.GetItemStates();
    var builder = new StringBuilder();
    builder.Append("<select class='form-control ItemStateSelector'>");

    foreach (var state in states)
    {
        builder.Append(state.ItemStateId == itemStateId
            ? String.Format(CultureInfo.InvariantCulture, "<option value='{0}' selected='selected'>{1}</option>",
                state.ItemStateId, state.ItemStateName)
            : String.Format(CultureInfo.InvariantCulture, "<option value='{0}'>{1}</option>", state.ItemStateId,
                state.ItemStateName));
    }

    builder.Append("</select>");

    return builder.ToString();
}

1 ответ

Решение

Я посмотрел на то, как вы это реализовали, и воспроизвел это локально. Могу сказать, что на данный момент это лучший способ сделать это. Если у вас есть мысли о том, как это можно сделать проще, я бы с удовольствием их услышал!

Другие вопросы по тегам