我正在使用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,我应该分享哪些其他部分,或者只是共享整个模型视图和控制器文件?
答案 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) %>