2015-05-10 105 views
2

我正在使用MVCGrid.net(http://mvcgrid.net)。我有一个物品网格。说我的项目视图模型看起来是这样的:使用MVCGrid.net实现内联DropDownList的最佳方式是什么?

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

回答

0

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

相关问题