如何在不使用ViewData的情况下将对象属性绑定到DropDownList中的数据源

时间:2018-03-05 14:45:34

标签: javascript c# jquery asp.net-mvc kendo-ui

我的kendo Grid中有一个DropDownList列。我想将DataSource中的ViewData [" genres"]更改为GenreViewModel属性" AllGenres"。我怎样才能做到这一点?别忘了我使用js版本的Grid(不是mvc)。

我认为应该是这样的:

dataSource: @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize("AllGenres"))

dataSource: "AllGenres"

反对:

dataSource: @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["genres"]))

我的DropDownList:

function genreDropDownEditor(container, options) {
    $('<input required name="' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList({
            autoBind: false,
            dataTextField: "GenreName",
            dataValueField: "GenreId",
            dataSource: @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["genres"]))               
});
<script type="text/kendo" id="genresTemplate">
    #if(data.Genre != null)
    { #

    #: Genre.GenreName #

    # } #

我的GenreViewModel:

public class GenreViewModel
{
    public int GenreId { get; set; }
    public string GenreName { get { return Enum.GetName(typeof(Genre), GenreId); } }

    public static List<GenreViewModel> AllGenres
    {
        get
        {
            return Enum.GetValues(typeof(Genre)).Cast<Genre>().Select(v => new GenreViewModel
            {
                GenreId = ((int)v)
            }).ToList();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Stephen Muecke在评论中给出了答案。(不知道如何正确选择他的评论作为答案)

dataSource: @Html.Raw(Json.Encode(Model.AllGenres)).

但我没有在我的视图中声明模型,所以 我使用了我的静态属性:

dataSource: @Html.Raw(Json.Encode(Number2.Models.GenreViewModel.GetAllGenres))