【问题标题】:Can I set text box to readonly when using Html.TextBoxFor?使用 Html.TextBoxFor 时可以将文本框设置为只读吗?
【发布时间】:2011-02-02 02:27:40
【问题描述】:

我有以下带有 Html.TextBoxFor 表达式的标签,我希望内容是只读的,这可能吗?

<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action)%>

【问题讨论】:

标签: .net html asp.net-mvc


【解决方案1】:
<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @readonly = true })%>

【讨论】:

  • 这是正确的,但 @readonly=false 为我提供了相同的结果。因此,决定功能的是 readonly 的值,而是属性本身的存在。
  • 有什么办法可以克服这个问题吗?基本上我想在其他一些变量上动态分配@readonly = false 或 true(愚蠢的要求)
【解决方案2】:

使用以下内容:

 @Html.TextBoxFor(m => m.Whatever, new {@readonly = "readonly"})

如果你想给它分配一个类,你可以用同样的方法,通过添加 @class= "" 财产。希望这会有所帮助:)

【讨论】:

    【解决方案3】:

    根据@1c1cle 在评论中的建议更新了现代版本的 .NET:

    <%= Html.TextBoxFor(model => Model.SomeFieldName, new {{"readonly", "true"}}) %>
    

    请意识到这不是一种“安全”的方式来做到这一点,因为有人可以注入 javascript 来改变这一点。

    需要注意的是,如果您将 readonly 值设置为 false,您实际上不会看到任何行为变化!因此,如果您需要基于变量来驱动它,您不能简单地将那个变量插入其中。相反,您需要使用条件逻辑来简单地不传递 readonly 属性。

    这是一个未经测试的建议(如果有问题,您可以随时执行 if/else):

    <%= Html.TextBoxFor(model => Model.SomeFieldName, shouldBeReadOnlyBoolean ? new {{"readonly", "true"}} : null) %>
    

    【讨论】:

    • new Dictionary(){{"readonly", "false"}} 和 new Dictionary(){{"readonly", "anything"}} 提供结果相同。
    【解决方案4】:

    使其只读

    @Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @readonly="true"})
    

    禁用

    @Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @disabled="true"})
    

    【讨论】:

      【解决方案5】:
      <%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new {readonly=true})%>
      

      【讨论】:

        【解决方案6】:

        以下 sn-p 对我有用。

        @Html.TextBoxFor(m => m.Crown, new { id = "", @style = "padding-left:5px", @readonly = "true" }) 
        

        【讨论】:

          【解决方案7】:

          这对我有用...

          @Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = "readonly" })
          

          【讨论】:

          • 我知道已经很晚了,但是对于稍后阅读本文的人来说:没有必要为这个“value = @Model.RIF”.Net Framework 为你做这个。如果 Model.RIF 有值,则分配给输入文本框的值。
          【解决方案8】:
          <%: Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @autocomplete = "off", @readonly=true})%>
          

          这是您设置多个属性的方式

          【讨论】:

            【解决方案9】:

            另一种可能性:

            <%= Html.TextBoxFor(model => Model.SomeFieldName, new Dictionary<string, object>(){{"disabled", "true"}}) %>
            

            【讨论】:

              【解决方案10】:

              使用@Hunter 的例子,在新的 { .. } 部分,添加 readonly = true,我认为可以。

              【讨论】:

                【解决方案11】:

                事实上,Brain Mains 的答案几乎是正确的:

                @Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = true })
                

                【讨论】:

                  【解决方案12】:

                  如果你必须应用你的自定义类,你可以使用

                    @Html.TextBoxFor(m => m.Birthday,   new Dictionary<string, object>() { {"readonly", "true"}, {"class", "commonField"} } )
                  

                  在哪里

                  commonField 是 CSS 类

                  Birthday 可能是字符串字段,您可能可以使用它来保存jQuery Datapicker 日期:)

                  <script>
                               $(function () {
                                   $("#Birthday").datepicker({
                  
                                   });
                               });
                    </script>
                  

                  这是一个真实的例子。

                  【讨论】:

                    【解决方案13】:
                       @Html.TextBoxFor(model => model.IdUsuario, new { @Value = "" + User.Identity.GetUserId() + "", @disabled = "true" })
                    
                    @disabled = "true"
                    

                    效果很好

                    【讨论】:

                      【解决方案14】:

                      您也可以禁用 TextBoxFor

                      @Html.TextBoxFor(x=>x.day, null, new { @class = "form-control success" ,@disabled="disabled" })
                      

                      【讨论】:

                      • 我不建议这样做。我刚刚发现,通过禁用该字段,它会使模型在您触发操作结果时无法获取值。
                      【解决方案15】:

                      通过将readonly属性设置为true或false在大多数浏览器中都不起作用,我已经做到了如下,当页面的模式是“reload”时,我没有包含“readonly”属性。

                      @if(Model.Mode.Equals("edit")){
                      @Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @readonly = moduleEditModel.Content.ReadOnly, @style = "width:99%; height:360px;" })
                      }
                      @if (Model.Mode.Equals("reload")){
                      @Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @style = "width:99%; height:360px;" })}
                      

                      【讨论】:

                        猜你喜欢
                        • 2010-09-14
                        • 1970-01-01
                        • 2013-09-24
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-05-14
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多