Grałem z ASP.NET MVC i wpadłem na coś, czego nie mogę wymyślić.ASP.NET MVC: Zmienianie właściwości modelu na poczcie zwrotnej
Załóżmy, że mam obiektu takiego:
public class TestObject
{
public string Name { get; set; }
public int Age { get; set; }
}
a strona widzenia (Create.aspx) tak:
<form action="/Create" method="post">
<p>
<%=Html.TextBox("Name") %>
</p>
<p>
<%=Html.TextBox("Age")%>
</p>
</form>
A w moim kontroler mam następujące działania:
[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);
}
Metoda Html.TextBox()
zawsze generuje domyślne wartości pól tekstowych, nawet po pos tback, gdzie obiekt jest przekazywany z różnymi właściwościami na swoje wartości. Przyznaję, że nie mogę wymyślić prawdziwego przykładu na świecie, dlaczego chciałbym coś takiego zrobić, ale nadal nie rozumiem, dlaczego zawsze mam do czynienia z zapełnionymi polami tekstowymi z wartościami modelu, które zostały ustawione w akcji Utwórz. z atrybutem AcceptVerbs(HttpVerbs.Get)
.
Uwaga: Próbowałem już Html.TextBox("Name", Model.Name)
, ale wynik jest wciąż taki sam. I zweryfikowałem, że akcja Create z AcceptVerbs(HttpVerbs.Post)
faktycznie działa, przekazując wartość poprzez ViewData do widoku. Również udana wartość jest wyświetlana, gdy wyprowadzam wartość z <%=Model.Name %>
, ale znowu, nie w polu tekstowym.
Czy jest coś oczywistego, czego mi brakuje? Czy istnieje uzasadnienie tego zachowania?
Możesz być także zainteresowany moją odpowiedzią na podobne pytanie - http://stackoverflow.com/questions/953330/does-html-textbox-uses-request-params-instead-of-model/954524#954524 –