2010-04-22 14 views
6

Tengo un problema con algo que estoy seguro es muy simple. He estado usando Asp.Net MVC y decidí comenzar a usar Asp.Net MVC 2. Algo ha cambiado y ahora necesito un poco de ayuda. Los ayudantes inflexible de tipos se escriben ahora como esto -ASP.Net MVC 2 - Necesita agregar una propiedad predeterminada a un Html.Textbox Helper fuertemente tipado En Asp.Net MVC 2

<%= Html.TextBoxFor(model => model.State) %> 

tengo que añadir un valor predeterminado a un cuadro de texto. En la versión anterior de Asp.Net MVC, era fácil asignar un valor predeterminado. Pensé hacer lo siguiente funcionaría en MVC 2-

<%= Html.TextBoxFor(model => model.CountyId, new{ value = 840 })%> 

Sin embargo, esto no funciona para mí en Asp.Net MVC 2. El valor está todavía en blanco para el cuadro de texto. Quiero asegurarme de que este no sea un error aleatorio que estoy teniendo. ¿Alguien más ha tenido el mismo problema? He buscado y buscado para encontrar más información sobre la propiedad predeterminada para los helpers html en MVC 2, pero no puedo encontrar nada. ¿Alguien sabe cómo asignar correctamente un valor predeterminado a un cuadro de texto en Asp.Net MVC 2?

+2

Me gustaría llevar a cabo esta lógica con mi controlador ya que puebla el modelo de vista. – Jaxidian

Respuesta

5

Si se trata de un valor constante, podría asignar el valor predeterminado a la propiedad en su modelo (puede configurarlo en su constructor o en un campo de respaldo si usa propiedades de "estilo antiguo"). Algo así como:

public class Model 
{ 
    public int CountryId { get; set; } 

    public Model() 
    { 
     this.CountryId = 840; 
    } 
} 

O si varía según la petición, y luego lo puso en una vista de modelo que se pasa a la vista de su controlador.

+0

¿Es esta la única manera? Me he dado cuenta de que propiedades como MaxLength todavía funcionan correctamente como esta <% = Html.TextBoxFor (model => model.CountryID, new {maxlength = "40"})%>. ¿Acaba de eliminarse el valor o esta es la única manera de agregar un valor predeterminado en MVC 2 ahora? – Sara

+0

No lo he comprobado, pero esta parece ser la mejor manera de hacerlo, ya que elimina la lógica de la Vista. La vista solo debe mostrar datos, no establecerlos. Sin embargo, no hay nada que te impida usar los helpers Html.TextBox antiguos o, de hecho, codificar a mano el HTML. –

+0

Al pensar en ello, sé que se puede hacer de la manera descrita, pero creo que esto puede ser un error en MVC 2. Por ejemplo, aún puede establecer todas las demás propiedades del cuadro de texto usando el nuevo { whateverProperty = value}. SÓLO es la propiedad de valor que parece no funcionar. Creo que debe ser un error. ¿Qué sucede si quiere agregar una propiedad predeterminada para decir "Ingresar texto aquí" o algo así? Eso no es lógica de negocios. Tiene que haber alguna forma en la que me estoy perdiendo. Voy a ir a MS Connect para ver si esto es un error o un nuevo comportamiento previsto. Publicaré su respuesta aquí. – Sara

3

OK. He encontrado la respuesta a mi problema, más o menos. El nuevo Html.TextBoxFor en MVC 2 no permite la configuración de la propiedad valor con el objeto htmlAttributes a pesar de que conserva la capacidad para fijar todas las otras propiedades utilizando la sintaxis de este

<%= Html.TextBoxFor(model => model.CountryName, new { maxlength = "40" })%> 

Así que para conseguir alrededor este tema, si es necesario establecer un valor predeterminado en un campo de texto, es necesario utilizar la sintaxis de edad -

<%= Html.TextBox("CountryName", "Enter your country name")%> 

que agregará una propiedad valor predeterminado apropiadamente en el html. La nueva especificación TextBoxFor no se puede usar en esta instancia, pero el valor seguirá regresando al controlador de la misma forma que la expresión lambda. TODAS las demás propiedades del cuadro de texto se pueden establecer usando textboxfor (maxlength, etc.) usando la nueva sintaxis {whateverProperty = value}, pero no la propiedad del valor.

9

En realidad, en el caso de que alguien más tiene este problema, utilizando Valor en lugar de valor obras. Creo que el problema es que el valor con un es una palabra clave C#.

+0

esto me parece un error, permitir que un atributo HTML encasillado pase por encima y anule un valor que está definido en la propiedad del modelo de vista. ¡Es interesante saber que funciona bien! –

1
@Html.TextBoxFor(model => model.CountyId, new{ @value = 840 }) 

obras en la sintaxis de afeitar asp.net MVC3

Cuestiones relacionadas