编辑器模板未选择值正确的值

时间:2013-04-02 15:27:30

标签: asp.net-mvc asp.net-mvc-3 kendo-ui mvc-editor-templates

我有一个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,ShortName为“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"])
)

1 个答案:

答案 0 :(得分: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"])
)