2010-03-29 20 views
49

Tengo la siguiente etiqueta con una expresión Html.TextBoxFor y quiero que el contenido sea de solo lectura, ¿es esto posible?¿Puedo configurar el cuadro de texto para que sea de solo lectura cuando se usa Html.TextBoxFor?

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

> [Aquí está n Se puede ver. cómo crear sólo lectura en el cuadro de texto MVC] (http://www.codeshower.blogspot.in/2012/09/mvc-how-to-create-readonly-textbox-in.html) –

Respuesta

33

Actualización para las versiones modernas de .NET para cada sugerencia de @ 1c1cle en un comentario:

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

se dan cuenta de que esto no es una forma "segura" para hacer esto como alguien puede inyectar javascript para el cambio esta.

Algo a tener en cuenta es que si configura ese valor readonly en false, ¡en realidad no verá ningún cambio en el comportamiento! Entonces, si necesita manejar esto basado en una variable, simplemente no puede conectar esa variable allí. . En cambio es necesario utilizar la lógica condicional para simplemente no pasar esa readonly atributo en

Aquí es una sugerencia no probado para saber cómo hacer esto (si hay un problema con esto, siempre se puede hacer un if/else):

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

nueva Dictionary () {{ "sólo lectura", "falso"}} y nueva Dictionary () {{"readonly", "anything"}} proporciona los mismos resultados. – 1c1cle

7
<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new {readonly=true})%> 
1

Utilizando el ejemplo de @Hunter, en la parte nueva {..}, añadir sólo lectura = true, creo que va a funcionar.

+1

No, eso da un error: El término de expresión no válido 'readonly' –

102
<%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @readonly = true })%> 
+11

es correcto, pero @ readonly = false proporciona el mismo resultado para mí. Por lo tanto, es el valor de readonly el que decide la funcionalidad, pero la existencia del atributo en sí mismo. – 1c1cle

+3

¿hay alguna manera de superar esto? Básicamente quiero asignar dinámicamente @ReadOnly = falsa o verdadera en algunas otras variables (requisitos estúpidos) – rank1

4
<%: Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @autocomplete = "off", @readonly=true})%> 

Esta es la forma de configurar múltiples propiedades

3

Este trabajo para mí ...

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

De hecho la respuesta de la red eléctrica del cerebro es casi correcta:

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

En caso si usted tiene que aplicar su clase personalizada puede utilizar

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

Dónde están

commonField se CSS clase

y Cumpleaños co ULD ser campo de cadena que es probable que pueda utilizar para mantener jQuery Datapicker fecha :)

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

       }); 
      }); 
    </script> 

Eso es un ejemplo de la vida real.

0

Al configurar el atributo readonly en verdadero o falso no funcionará en la mayoría de los navegadores, lo he hecho de la siguiente manera, cuando el modo de la página es "reload", no he incluido el atributo "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;" })} 
1

Una otra posibilidad:

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

Para que sea de sólo lectura

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

diable

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

utilizar lo siguiente:

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

Si desea asignarle una clase, puede hacerlo de la misma manera, agregando la propiedad @class = "" . Esperamos que esto ayude :)

+0

Esto funcionó para mí. – Orion

4

El siguiente fragmento trabajó para mí.

@Html.TextBoxFor(m => m.Crown, new { id = "", @style = "padding-left:5px", @readonly = "true" }) 
0
@Html.TextBoxFor(model => model.IdUsuario, new { @Value = "" + User.Identity.GetUserId() + "", @disabled = "true" }) 

@disabled = "true" 

funcionan muy bien

Cuestiones relacionadas