1

我有一个剑道网格,每行都有一个自定义编辑按钮。当用户单击编辑按钮时,将打开一个模式窗口,用户可以在其中编辑信息并保存更改。

我添加了一个编辑器模板来显示状态缩写的下拉列表。

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"])
)
4

1 回答 1

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"])
)
于 2013-04-02T17:51:26.407 回答