2013-04-02 55 views
1

我有一個Kendo網格,每行都有一個自定義編輯按鈕。當用戶單擊編輯按鈕時,會打開一個模式窗口,用戶可以在其中編輯信息並保存更改。編輯器模板不選擇值正確值

我已經添加了一個編輯模板來顯示狀態縮寫的下拉列表。

StatesEditor.cshtml

@(Html.Kendo().DropDownList() 
.Name("State") 
.DataValueField("StateID") 
.DataTextField("ShortName") 
.BindTo((System.Collections.IEnumerable)ViewData["states"])) 

這被在我的控制器填充之前,我打開我的模態窗口:

public ActionResult OpenEditor([DataSourceRequest] DataSourceRequest request, int? addressId) 
    { 
     var address = db.Address.Where(x => x.AddressId == addressId).FirstOrDefault(); 
     // code where I convert the address to an AddressMetadata 
     // ... 
     // ... 

     ViewData["states"] = ACore.Methods.ViewDataPopulation.PopuldateStates(); 


     return PartialView("~/Views/System/Addresses/AddressEditorPopup.cshtml", addr); 
    } 

在我看來,我有

@Html.EditorFor(model => model.State) 

,這是我的型號:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 

namespace ACore.Models 
{ 
    [MetadataType(typeof(AddressMetadata))] 
    public partial class Address 
    { 
    } 

    public class AddressMetadata 
    { 
     public int AddressID { get; set; } 

     public string Street1 { get; set; } 
     public string Street2 { get; set; } 
     public string City { get; set; } 

     [UIHint("StatesEditor")] 
     public State State { get; set; } 

     public string ZipCode { get; set; } 
    } 
} 

,這是我的美國模式:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ACore.Models 
{ 
    public class State 
    { 
     public int Id { get; set; } 
     public string ShortName { get; set; } 
    } 
} 

的下拉列表被填充了國家的列表,但它設置爲「AK」,在列表中的第一個狀態。我將我的觀點傳遞給一個模型,其中狀態是一個ID爲41,短名稱爲「SC」的狀態模型。

如何讓我的下拉列表設置爲傳入的狀態?

更新:

我不知道這是否是這樣做的正確的方式,但是這是我的固定它。只需添加的SelectedIndex固定的問題,但我加入的DropDownList上面的代碼,所以我可以用在我沒有傳入ID的其他地方這個編輯器。

@model ACore.Models.State 
@{ 
    var modelId = 0; 
} 
@if (Model != null) 
{ 
    modelId = Model.Id - 1; 
} 


@(Html.Kendo().DropDownList() 
    .Name("State") 
    .DataValueField("StateID") 
    .DataTextField("ShortName") 
    .SelectedIndex(modelId) 
    .BindTo((System.Collections.IEnumerable)ViewData["states"]) 
) 

回答

0

我已在上述更新的評論中回答了我的問題。我仍然想知道這是否是推薦的方式。

@model ACore.Models.State 
@{ 
    var modelId = 0; 
} 
@if (Model != null) 
{ 
    modelId = Model.Id - 1; 
} 


@(Html.Kendo().DropDownList() 
    .Name("State") 
    .DataValueField("StateID") 
    .DataTextField("ShortName") 
    .SelectedIndex(modelId) 
    .BindTo((System.Collections.IEnumerable)ViewData["states"]) 
) 
相關問題