He estado jugando con ASP.NET MVC y encontré con algo que no puedo entender.ASP.NET MVC: cambiar las propiedades del modelo en la devolución de datos
Supongamos que tengo un objeto como éste:
public class TestObject
{
public string Name { get; set; }
public int Age { get; set; }
}
y una página de vista (Create.aspx) así:
<form action="/Create" method="post">
<p>
<%=Html.TextBox("Name") %>
</p>
<p>
<%=Html.TextBox("Age")%>
</p>
</form>
Y en mi controlador tengo estas acciones:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
{
return View(new TestObject { Name = "DefaultName", Age = 10 });
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(TestObject o)
{
o.Name = "ChangedNameToSomethingElse";
o.Age = 15;
return View(o);
}
El método Html.TextBox()
siempre genera los cuadros de texto con los valores predeterminados, incluso después de la posición tback, donde el objeto se devuelve con diferentes propiedades en sus valores. Ahora, concedido, no puedo pensar en un ejemplo del mundo real por el que quisiera hacer tal cosa, pero todavía no entiendo por qué siempre termino teniendo textboxes poblados con los valores del modelo que se establecieron en la acción Crear con el atributo AcceptVerbs(HttpVerbs.Get)
.
Nota: He intentado Html.TextBox("Name", Model.Name)
pero el resultado sigue siendo el mismo. Y verifiqué que realmente se ejecuta la acción Crear con AcceptVerbs(HttpVerbs.Post)
, pasando un valor a través de ViewData a la Vista. Además, el valor udated se muestra cuando genero el valor con <%=Model.Name %>
pero de nuevo, no en el cuadro de texto.
¿Hay algo obvio que me falta, o hay un razonamiento detrás de este comportamiento?
También le puede interesar mi respuesta a una pregunta similar - http://stackoverflow.com/questions/953330/does-html-textbox-uses-request-params-instead-of-model/954524#954524 –