在MVC3中是否有办法制作一个只读文本框,其值为POST?
我尝试了以下内容(来自本网站上的其他人):
@Html.TextBoxFor(m => m.Model.xxxx, new { disabled = "disabled", @class = "text-box single-line", @readonly = "readonly" })
然而,该值不会被POST,检查它会给出NULL。 我使用文本框作为样式的原因,因为我认为它会正确回发。我在页面上有JScript来更新值,因此重要的是能够取回它的POST值。
我将开始考虑使用DisplayFor和HiddenFor对,但想知道是否有更优雅的解决方案。
答案 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).