使用 MVCGrid.net 实现内联 DropDownList 的最佳方式是什么?
What's the best way to implement an inline DropDownList using MVCGrid.net?
我正在使用 MVCGrid.net (http://mvcgrid.net)。我有一个项目网格。假设我的项目的视图模型如下所示:
public class ItemViewModel
{
public string ItemNumber { get; set; }
public string ItemStateId { get; set; }
}
我希望能够使用下拉列表从网格中更改项目状态。我想我有一个很好的解决方案,使用可用的 API。我只是想确保这是最好的方法。我的意图是使用下面的代码呈现下拉列表。然后在 "ItemStateSelector" 的 "change" 事件上有一个 jquery 事件处理程序,以处理使用 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();
}
我看了看你是怎么实现的,在本地复现了。我可以说,在这个时候,这是最好的做法。如果您有任何关于如何让它变得更容易的想法,我很乐意听取他们的意见!
我正在使用 MVCGrid.net (http://mvcgrid.net)。我有一个项目网格。假设我的项目的视图模型如下所示:
public class ItemViewModel
{
public string ItemNumber { get; set; }
public string ItemStateId { get; set; }
}
我希望能够使用下拉列表从网格中更改项目状态。我想我有一个很好的解决方案,使用可用的 API。我只是想确保这是最好的方法。我的意图是使用下面的代码呈现下拉列表。然后在 "ItemStateSelector" 的 "change" 事件上有一个 jquery 事件处理程序,以处理使用 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();
}
我看了看你是怎么实现的,在本地复现了。我可以说,在这个时候,这是最好的做法。如果您有任何关于如何让它变得更容易的想法,我很乐意听取他们的意见!