【发布时间】:2010-06-17 23:00:36
【问题描述】:
好的,让我们从 Html.Textbox 开始。它应该包含从文件中读取的文本。文件读取基于用户从下拉列表中选择的内容。
第一次还好。用户从下拉列表中选择一个值。控制器使用该值从文件中读取一些文本,并通过视图模型将该文本返回给视图。一切都很好。
然后用户从下拉列表中选择另一个值。控制器从文件中读取一个新值并通过视图模型返回它。调试到视图中设置 HTML.TEXTBOX 之前的 LINE 表明模型包含正确的值。但是,当页面显示时,文本框本身仍然显示 PREVIOUS 值!
如果我从 Html.Textbox 切换到纯输入 type="text" html 控件,一切正常。这并不难,但我的下拉列表也会发生同样的事情——我无法在代码中设置选定的值。它总是恢复到最后选择的任何内容。使用动态生成的选项列表呈现“选择”标签是一件很痛苦的事情。我希望能够使用 Html.Dropdown。
我在这里错过了什么?这在网络表单中是如此简单!
【问题讨论】:
-
我也有同样不直观的行为。模型肯定是它应该渲染的,而 HtmlHelper 应该渲染模型?如果 Model.CaptchaAttempt == "" 在 Html.TextBoxFor(m=>m.CaptchaAttempt) 运行之前,它肯定应该呈现一个空值的文本框吗?你解决问题了吗?
-
我确实找到了答案——我创建了另一个线程 (stackoverflow.com/questions/3444994/…),因为我想我已经忘记了这个问题。我将 ModelState.SetModelValue 用于我想设置为空白或某种状态的字段。一些评论者认为我应该做 RedirectToAction,但我回答说我希望能够向用户显示确认消息,这需要重新显示相同的视图。我认为确认消息很重要,所以我就这样做了,尽管它可能不是最佳实践。
标签: asp.net-mvc-2 postback html-helper