如何正确禁用Html Helper Textbox或TextBoxFor?

时间:2012-08-15 18:46:28

标签: asp.net-mvc-3 entity-framework razor linq-to-entities html-helper

我有一个用于进入的剃须刀显示器。在一种情况下,我希望用户能够填充文本框,在另一种情况下,我想阻止用户填充它。我使用的代码如下:

@Html.TextBoxFor(model => model.Goop, new { @class = "text-box", maxlength = 2, onfocus = "javascript:this.select();" })
if (Model.Review.ReviewType.Equals("M"))
{ 
    <script type="text/javascript">
        $(function () {
            $("#Goop").prop("disabled", true);
         });
    </script>
}

我试过这几种方式,jQuery(上面),CSS attribs,javascript,ASP.NET ......但都有相同的问题:当提交表单时,如果Goop文本框被禁用,则值对于模型中的Goop是Null。想法? 提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果没有jQuery,也许它不那么酷,但是当我在我的应用程序中执行此操作时,我会按照

的方式执行某些操作。
if (Model.Review.ReviewType.Equals("M"))
{ 
    @Html.DisplayFor(model => model.Goop)
    @Html.HiddenFor(model => model.Goop)
}
else
{
    @Html.TextBoxFor(model => model.Goop)
}

答案 1 :(得分:1)

如果禁用表单元素,则不会发布值。这就是它应该如何运作。

要解决此问题,您需要执行以下操作之一。您可以通过拦截提交方法在发布之前启用字段。除了禁用的控件之外,您还可以使用隐藏字段来存储数据。或者你可以假设控制器端的值。

顺便说一下,它应该是.prop("disabled", "disabled"),它呈现为禁用=“禁用”,符合标准。