MVC3只读文本框,但值必须POST

时间:2012-06-08 09:36:39

标签: asp.net-mvc-3

在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 个答案:

答案 0 :(得分:4)

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

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

“已禁用的控件无法成功。”并且“成功控制”有效“提交。”

答案 1 :(得分:3)

试试这个:

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

答案 2 :(得分:0)

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

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

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

或者,您可以在页面加载时禁用TextBox而不是标记,并根据需要使用Javascript或jQuery再次启用它(例如,编辑按钮或其他内容)

答案 3 :(得分:0)

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

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

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