2011-09-26 9 views
7

Tengo un problema extraño y me ha estado frustrando durante las últimas horas. Parece que no puedo encontrar nada relacionado; quizás no soy lo suficientemente específico, ya que no estoy seguro de cómo decirlo correctamente, o es un problema extrañamente único.Ese área de texto de nulidad

Hay un formulario que un usuario rellena para actualizar la información de su cuenta, todo funciona como debería, a excepción de un área de texto. Este valor de áreas de texto (que está vinculado al valor Comments de UserInfo) pasa a ser nulo una vez que el formulario está ENVIADO. La propiedad Comments es la única propiedad que es nula.

cuando se produce
a) ningún valor existente, usuario introduce un valor, la propiedad es nulo.
B) Valor existente, el usuario hace/no cambia algo/cualquier cosa, la propiedad es nula.

Solo incluiré el código correspondiente para mantener las cosas limpias y simples. Espero que sea suficiente.

acciones del controlador

public ActionResult Edit_Information(long id) 
{ 
    // Get user info from the database. 
    // Return the view with the user info from the DB etc. 
} 

[HttpPost] 
public ActionResult Edit_Information(long id, UserInfo userInfo) 
{ 
    if (!this.ModelState.IsValid) 
    { 
     // Invalid 
     return View(userInfo); 
    } 

    // Update the information in the DB. 

    // Redirect the user back to their account. 
} 

Razor vista HTML

<div style="width: 700px; margin-left: auto; margin-right: auto; text-align: left"> 
@Html.ValidationMessageFor(x => x.Comments) 
</div> 
@Html.Partial("~/Views/Shared/_EditorSmiles.cshtml") 
@Html.TextAreaFor(x => x.Comments, new { @class = "EditorArea profile-comments" }) 

UserInfoModelo

[Validator(typeof(UserInfoValidator))] 
public class UserInfo 
{ 
    public string Comments { get;set; } 
} 

Sí, uso FluentValidation en el modelo. Lo eliminé para ver si era la causa, pero no fue así.

cosas que he intentado

  • En la acción POST, he utilizado en lugar de FormCollection formCollectionUserInfo userInfo.
  • Lanzó una excepción en la acción POST para demostrar que el valor se vuelve nulo cuando se publica.
  • Creó una nueva propiedad con un nombre diferente.
  • Dio manualmente un valor a la propiedad antes de devolver la vista. El valor se volvió nulo cuando se publicó.
  • Dio manualmente a la propiedad un valor en la acción POST para probar que no era la base de datos o el SQL. Esto funcionó.
  • Se ha eliminado el atributo Validación fluida del modelo (como se dijo anteriormente).
  • Usado [Bind(Prefix = "")] antes UserInfo userInfo. Esto no cambió nada.

Me ha frustrado hasta el punto en que tengo que preguntar: ¿Qué demonios está pasando? ¿Estoy haciendo algo mal? Debo estar pasando por alto algo. Hay otra área de texto en la página que funciona como debería. Es solo el área de texto para Comments que siempre devuelve valores nulos independientemente de las condiciones.

+0

Eliminar tipo UserInfo: solo tiene un parámetro de comentarios. ¿Está poblado? ¿Los comentarios están en el formulario (y lo ves publicado en Fiddler)? –

+0

Hecho. Los comentarios existen en la forma (al menos supongo que es). Todavía es nulo. No estoy familiarizado con Fiddler, de hecho, nunca he oído hablar de él. –

+1

Quizás una pregunta muy estúpida, pero ¿está seguro de que la parte de "comentarios" que publicó aquí está incluida dentro de la etiqueta de formulario correcta? ¿O tal vez tienes una colisión de nombre en tu vista? – Iridio

Respuesta

3

La forma estaba siendo envuelto de esta manera:

Html.BeginWindow(); 
Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
<!-- other stuff goes in between here --> 
Html.EndForm(); 
Html.EndWindow(); 

Html.BeginWindow() genera una tabla (una ventana) que se envuelve alrededor de la forma. Obviamente, esto provocó que partes del formulario no se PUBLICAN correctamente.

cambiado a:

Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
Html.BeginWindow(); 
<!-- other stuff goes in between here --> 
Html.EndWindow(); 
Html.EndForm(); 

Bam! Funcionó de nuevo. Esto nunca se me ocurrió como lo he hecho antes sin ningún problema. Me alegra que esté arreglado. Todos cometemos errores.

Cuestiones relacionadas