首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DropDownList实现内联MVCGrid.net的最佳方法是什么?

使用DropDownList实现内联MVCGrid.net的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-05-10 04:07:51
回答 1查看 237关注 0票数 3

我正在使用MVCGrid.net (http://mvcgrid.net)。我有一系列的物品。假设我的项目的视图模型如下所示:

代码语言:javascript
复制
public class ItemViewModel
{
    public string ItemNumber { get; set; }
    public string ItemStateId { get; set; }
}

我希望能够使用下拉列表从网格中更改item状态。我认为我有一个很好的解决方案,使用的API是可用的。我只想确定这是最好的方法。我的意图是使用下面的代码呈现下拉列表。然后,在"ItemStateSelector“的"change”事件上有一个jquery事件处理程序来处理使用ajax请求实际更改项的状态。除了检索查询结果中每个项的可用状态这一性能问题外,这是否是解决该问题的最佳解决方案?

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-29 18:43:11

我看了一下您是如何实现的,并在本地复制了它。我可以说,在这个时候,这是最好的方法。如果你对如何使它变得更容易有任何想法,我很乐意听到它们!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30147610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档