4

在 MVC3 中有没有办法制作一个只读文本框,其中值被 POST 回传?

我尝试了以下方法(来自本网站上的其他人):

@Html.TextBoxFor(m => m.Model.xxxx, new { disabled = "disabled", @class = "text-box single-line", @readonly = "readonly" }) 

但是,该值不会被 POST,检查它会给出 NULL。出于样式原因,我使用了一个文本框,因为我认为它会正确回发。我在更新值的页面上有 JScript,因此为什么能够取回其 POST 值很重要。

我将开始考虑使用 DisplayFor 和 HiddenFor 对,但想知道是否有更优雅的解决方案。

4

4 回答 4

4

Html 规范说不应该提交禁用的字段,因此您只能在您想要从 JS 更新值并提交它的情况下使用 readonly。带有使其看起来被禁用的 CSS 类的 readonly 可提供更好的 UI 体验。或者,只需使用跨度加隐藏输入。

见:http ://www.w3.org/TR/html401/interact/forms.html#h-17.12.1

“禁用的控件无法成功。” 和“一个成功的控制是‘有效的’提交。”

于 2012-06-08T10:39:14.977 回答
3

试试这个:

@Html.TextBoxFor(m => m.Model.xxxx, new {@class = "text-box single-line", @readonly = "readonly", onfocus = "this.blur()" })
于 2012-06-08T09:49:28.403 回答
0

试试这个。您似乎在@disabled 中有拼写错误!

@Html.TextBoxFor(m => m.Model.xxxx, new { @disabled = "disabled", @class = "text-box single-line", @readonly = "readonly" })

由于用户无法编辑它,您的另一个选项是 HiddenFor,然后您可以通过您的 ViewModel 提交该值

或者,您可以在页面加载而不是在标记中禁用文本框,并根据需要使用 Javascript 或 jQuery 再次启用它(即编辑按钮或其他东西)

于 2012-06-08T09:53:39.837 回答
0

正如你提到的(和其他人),我会使用:

@Html.DisplayFor(m => m.Model.xxxx)

@Html.HiddenFor(m => m.Model.xxxx).
于 2012-06-08T10:18:22.350 回答