刚开始使用ASP.NET MVC并偶然发现以下情况。感觉上很像一个错误,但是如果没有,请多解释一下:)视图包含非常基本的东西<%=Html.DropDownList("MyList", ViewData["MyListItems"] as SelectList)%><%=Html.TextBox("MyTextBox")%>不使用模型时,值和所选项目将按预期设置://works finepublic ActionResult MyAction(){ ViewData["MyListItems"] = new SelectList(items, "Value", "Text"); //items is an ienumerable of {Value="XXX", Text="YYY"} ViewData["MyList"] = "XXX"; //set the selected item to be the one with value 'XXX' ViewData["MyTextBox"] = "ABC"; //sets textbox value to 'ABC' return View();}但是,当尝试通过模型加载时,文本框的值已设置为预期值,但下拉列表未获得所选项目集。//doesnt workpublic ActionResult MyAction(){ ViewData["MyListItems"] = new SelectList(items, "Value", "Text"); //items is an ienumerable of {Value="XXX", Text="YYY"} var model = new { MyList = "XXX", //set the selected item to be the one with value 'XXX' MyTextBox = "ABC" //sets textbox value to 'ABC' } return View(model);}有任何想法吗?我目前的想法是,也许在使用模型时,我们只能在SelectList构造函数上设置选定的项,而不是使用viewdata(效果很好)并将selectlist传递给模型-这将有好处清理一下代码-我只是想知道为什么这种方法不起作用...。非常感谢您的任何建议 最佳答案 经过一堆折边和摘除后,它可以简化为以下代码行if (ViewData.ModelState.TryGetValue(key, out modelState))这意味着MVC试图通过仅查看ViewData Dictionary 对象而不向下遍历到ViewData.Model对象来解析该值。我不确定是错误,限制还是设计决策。但是,您可以通过以下方式修复它:<%= Html.TextBox("MyTextBox", ViewData.Model.MyTextBox) %>关于asp.net-mvc - ASP.NET MVC-Html.DropDownList-未通过ViewData.Model设置的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/390083/
10-13 03:13