我是 MVC 的新手,但我一直在研究这一切,阅读了所有文档、所有问题以及我能找到的所有博客文章,而我所做的只是完全缠绕在车轴上。
我正在尝试制作“创建”动作和视图。我的数据输入相对简单且常见:我有一个下拉列表和一个文本框。在我的例子中,我正在创建一个用户联系渠道,下拉框在电子邮件和 textmsg 之间进行选择,然后文本框输入相关的联系信息,可以是格式正确的电子邮件地址,也可以是手机号码。
这是我的视图页面的(稍微简化的形式):
<tr>
<td><%= Html.DropDownList("ChannelDescription", Model.ChannelDescription, "Select a Channel", new { id = "ChannelDDL", onchange="ChannelDDLChanged()" })%>
<br />
<%= Html.ValidationMessage("ChannelDescription", "Please Select a Channel") %>
</td>
<td>
<%= Html.TextBox("SubscriberNotificationAddr") %> <br />
<%= Html.ValidationMessage("SubscriberNotificationAddr", "Please enter a contact address or number") %>
</td>
</tr>
我使用的是强类型 ViewData 模型,而不是使用 ViewDataDictionary。ChannelDescription 元素是一个 SelectList,它使用选择列表进行初始化,没有选择。
表单的初始显示、表单中的数据输入以及控制器从表单中提取数据都很顺利。
我的问题是如果数据包含错误,例如格式错误的电子邮件地址或手机号码,并且我必须返回视图,我无法成功重新显示下拉列表选择。ChannelDescription 元素在控制器中重新创建,用户选择作为选定项。我已经在视图的那一行设置了断点,并验证了项目列表的选定元素的 Selected 属性设置为 true,但它仍然显示默认的“选择通道”。
这似乎是一个非常普遍的情况,不应该这么难。我究竟做错了什么?
仅供参考,这是在 Firefox 3.5.2 下运行的 MVC 1.0 (Release)、Windows 7 和 VS 2008。