Html.Display для проблемы DropDownList - PullRequest
0 голосов
/ 21 октября 2010

Я использую asp.net mvc 2. У меня есть модель Супермодель, которая состоит из 2 моделей TestModel1 и TestModel2.В SuperModelView я делаю следующее:

 <%: Html.DisplayFor(x=> x.TestModel1, "TestModel1Template") %>

Работает просто отлично, за исключением того, что выпадающий список заполнен, а выбранное значение не задано.Я использую следующий код для выпадающего списка в моем шаблоне:

<%: Html.DropDownListFor(x=> x.Property1, (IEnumerable<SelectListItem>)ViewData["MyDDLList"], Model.Property1) %>

, и это не установка выбранного свойства.Я поместил код ниже в SuperModelView, который вызывает <%: Html.DisplayFor, чтобы заполнить шаблон, и он работает просто отлично.Так что я немного озадачен, в чем разница?

<%: Html.DropDownListFor(x=> x.TestModel1.Property1, (IEnumerable<SelectListItem>)ViewData["MyDDLList"], Model.TestModel1.Property1) %>

ОБНОВЛЕНИЕ: Я пытался исследовать проблему, но что-то не так.Я могу поделиться всем кодом, не уверенным, куда его поместить, здесь или прикрепить к отдельным файлам.

@ Darin, какими другими частями я должен поделиться, или просто поделиться всем видом модели и файлами контроллера?

1 Ответ

2 голосов
/ 21 октября 2010

Во-первых, шаблоны отображения предназначены только для отображения.Если вам нужно редактировать с раскрывающимся списком, используйте шаблон редактора:

<%: Html.EditorFor(x => x.TestModel1, "TestModel1Template") %>

и в шаблоне редактора:

<%: Html.DropDownListFor(x => x.Property1, Model.MyDDLList) %>

, где MyDDLList определен как:

public IEnumerable<SelectListItem> MyDDLList { get; set; }

и в действии вашего контроллера вы заполняете значения:

public ActionResult Foo() 
{
    var model = new SuperViewModel 
    {
        TestModel1 = new TestModel1
        {
            // Set some selected value
            Property1 = "1",

            // Fill the drop down values
            // TODO: use a repository
            MyDDLList = new SelectList(new[]
            {
                new SelectListItem { Value = "1", Text = "text 1" },
                new SelectListItem { Value = "2", Text = "text 2" },
                new SelectListItem { Value = "3", Text = "text 3" },
            }, "Value", "Text")
        }
    }
    return View(model);
}

ОБНОВЛЕНИЕ:

Вот полный рабочий пример:

Модель:

public class MyViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

Контроллер:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            // Preselect the second item
            SelectedItemId = "2",
            Items = new SelectList(new[]
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
            }, "Value", "Text")
        };
        return View(model);
    }
}

Просмотр (~/Views/Index.aspx):

<%: Html.DisplayForModel() %>

DisplayTemplate (~/Views/DisplayTemplates/MyViewModel):

<%: Html.DropDownListFor(x => x.SelectedItemId, Model.Items) %>
...