刚刚开始使用ASP.NET MVC,遇到了以下情况。这感觉很像一个bug,但如果不是,请解释一下:)
视图包含非常基本的内容
<%=Html.DropDownList("MyList", ViewData["MyListItems"] as SelectList)%>
<%=Html.TextBox("MyTextBox")%>
不使用模型时,将按预期设置值和所选项目:
//works fine
public 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 work
public 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 (它工作得很好),并将选择列表与模型一起传递-这将有稍微清理代码的好处-我只是想知道为什么这个方法不能工作……
非常感谢您的建议
发布于 2008-12-23 23:13:24
经过一番折腾之后,它可以归结为下面这行代码
if (ViewData.ModelState.TryGetValue(key, out modelState))
这意味着MVC试图通过只查看ViewData Dictionary<>对象而不是遍历到ViewData.Model对象来解析该值。
这是一个错误,限制还是设计决定,我不确定。但是,您可以通过以下方式进行修复:
<%= Html.TextBox("MyTextBox", ViewData.Model.MyTextBox) %>
发布于 2010-12-12 00:49:17
很明显我来晚了。但我想添加这条评论,以防其他人遇到这个问题。
在MVC 2中。您可以执行以下操作来选择项目...
public ActionResult Edit(int id)
{
Team team = _db.TeamSet.First(m => m.TeamID == id);
var fanYear = from c in _db.FanYearSet select c;
ViewData["FantasyYear"] = new SelectList(fanYear, "YearID", "FantasyYear", team.FanYearReference.EntityKey.EntityKeyValues[0].Value);
var league = from c in _db.LeagueSet select c;
ViewData["League"] = new SelectList(league, "LeagueID", "League_Name", team.LeaguesReference.EntityKey.EntityKeyValues[0].Value);
return View(team);
}
第四个参数接受一个值,并将在下拉列表中选择您想要的值。在我的示例中,我有一个名为team的表,它是一个与名为fanYear和联盟的表设置的关系。
你可以看到,我首先得到了我正在编辑的球队,然后建立了一个梦幻年份的下拉列表,并为联赛建立了另一个下拉列表。为了确定球队的年份和联盟,我必须使用实体引用。
只是想把这点公之于众。我找不到任何这样做的例子。
发布于 2009-10-27 20:05:25
好吧,我可能在这个线程中遗漏了一些东西,但是在C#中,下面的代码是有效的:
Html.DropDownList("ProfessionGuid", (SelectList)ViewData["Professions"])
其中'ProfessionGuid
‘是要在列表中选择的值。
在VB.Net中,我认为应该是:
Html.DropDownList("ProfessionGuid", ViewData["Professions"] AS SelectList)
https://stackoverflow.com/questions/390083
复制相似问题