Как я могу использовать DropDownListFor () для динамического типа? - PullRequest
0 голосов
/ 30 июля 2011

Я получаю следующую ошибку в DropDownListFor() " Дерево выражений может не содержать динамическую операцию ", потому что лямбда использует динамический тип.

Как установить выбранныйопция в DropDownList без обращения к jQuery?

Я бы тоже не стал делать шаблон или пользовательский помощник.

Модель

public class Thing : Base {
    public virtual Nullable<int> OptionID { get; set; }
    public virtual Option Option { get; set; }
}
public class Option : Base {
    public virtual ICollection<Thing> Things { get; set; }
}
public class Base {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Контроллер

public ActionResult Edit(int Id) {
    return View(new ViewModel(context, new Thing()));
}

Просмотр

@model MvcApp7.Models.ViewModel
@{
    var Entity = (dynamic)Model.Entity;
}

@Html.DropDownListFor(x => Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)

ViewModel

public class ViewModel {
    public ViewModel(Context context, object entity) {
        this.Entity = entity;
        this.Options = new SelectList(context.Options, "Id", "Name");
    }
    public dynamic Entity { get; set; }
    public SelectList Options { get; set; }
}

РЕДАКТИРОВАТЬ : Пожалуйста, извините.Я забыл, что могу указать выбранную опцию в самом списке SelectList.Я перенес ответственность в ViewModel и постараюсь справиться с этим оттуда.Тем не менее, было бы хорошо знать, как обойти это в самом View, если это было необходимо.

Я сделал это в ViewModel
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
и это в View
@Html.DropDownList("OptionID", Model.Options)

1 Ответ

0 голосов
/ 30 июля 2011

Просмотр

@model MvcApp7.Models.ViewModel

@Html.DropDownListFor(x => x.Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)

ViewModel

public class ViewModel {
    public ViewModel(Context context, object entity) {
        this.Entity = entity;
        this.Options = new SelectList(context.Options, "Id", "Name");
    }
    public dynamic Entity { get; set; }
    public SelectList Options { get; set; }
}
...