2012-03-26 61 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