Html.DisplayFor DropDownList问题

时间:2010-10-21 08:06:48

标签: asp.net asp.net-mvc-2 html.dropdownlistfor

我正在使用asp.net mvc 2.我有一个模型Supermodel,包含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 个答案:

答案 0 :(得分:2)

首先显示模板仅用于显示。如果需要使用下拉列表编辑,请使用编辑器模板:

<%: 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) %>