2012-03-26 54 views
1

我的问题是我需要在Telerik MVC Grid Control中设置一个嵌套的DropDownList的选定值。由于网格绑定在客户端上,我需要在客户端的“onDrpLoad”事件中设置下拉列表中的选定项目。在Telerik MVC Grid中的Dropdownlist上设置选择的索引

什么是正确的方式来设置下拉列表中选定的索引?设置下拉列表中的选定项目不会导致“onDrpChange”事件触发也很重要。 “onDrpChange”事件还需要访问(发送到服务器)事件触发时选择的助理的AssistantId。

是否有干净简单的方法来做到这一点?

Html.Telerik().Grid<Person>().Name("Grid") 
    .DataBinding(dataBinding => dataBinding.Ajax).Select("GetDetails", "Person")) 
    .Columns(columns => columns.Bound(p => p.AssistantId).ClientTempalate(
     Html.Telerik().DropDownList().Name("AssistantList_<#= PersonId #>").BindTo(new 
      SelectList(AssistantController.GetAssistants))).ClientEvents(events => events.OnLoad("onDrpLoad"); events.OnChange("onDrpChange"); 
     ).ToHtmlString()); 

谢谢。

回答

0

下面是我该怎么做。 (过去已经使用过这种方法,它的工作原理)

而不是在DropDown声明中创建SelectList,使其成为模型的一个属性。

public class YourPageViewModel 
{ 
    public YourPageViewModel() 
    { 
     this.YourSelectList = <fill the list>; 
     this.SelectedItemIndex = <index of the item you want to be selected in the list>; 
    } 

    public SelectList YourSelectList { get; set; } 

    public int SelectedItemIndex { get; set; } 
} 

在您的视图的顶部您有:

@model YourPageViewModel 

那么你的下拉声明:

Html.Telerik().DropDownList().Name("AssistantList_<#= PersonId #>") 
    .BindTo(Model.YourSelectList).SelectedIndex(Model.SelectedItemIndex) 
    .ClientEvents(events => 
    { 
     events.OnLoad("onDrpLoad"); 
     events.OnChange("onDrpChange"); 
    }) 
    .ToHtmlString() 
+0

我决定用新的外国列功能去解决这个问题。唯一的缺点是我必须为Edit命令按钮添加一个新列。 – Stardust 2012-03-27 11:16:08

+0

感谢您的反馈因为我的网格绑定在客户端(即使用Ajax绑定)并从select命令(“GetDetails”)获得项目数据,所以不需要在我的模型上公开此列表。我的问题是,在构建视图模型对象时,在服务器上,您不知道将在行中显示哪个项目,这又意味着如果您有服务器端绑定下拉列表,则只能将选定的索引设置为client.FYI-I使用Telerik Grid控件上的ForeignKey列功能来解决此问题。缺点是我现在需要一个“命令按钮列”。 – Stardust 2012-03-27 12:44:20