Cześć, przygotowałem pewien fragment kodu by zobrazować problem na jaki natrafiłem. Ogólnego sensu widoków, modeli proszę nie brać dosłownie - to tylko kod by zobrazować błąd. Najpierw przedstawię kod :
Model:
public class User
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
ViewModel:
public class UserViewModel
{
public List<User> Users { get; set; }
public User User { get; set; }
public UserViewModel()
{
Users = new List<User>();
User = new User();
}
}
Kontroler:
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
UserViewModel model = new UserViewModel();
User u1 = new User();
u1.FirstName = "A";
u1.LastName = "1";
User u2 = new User();
u2.FirstName = "B";
u2.LastName = "2";
model.Users.Add(u1);
model.Users.Add(u2);
return View(model);
}
[HttpPost]
public ActionResult Index(UserViewModel model)
{
model.Users.Add(model.User);
model.User = new User();
return View(model);
}
}
Widok Index:
@model WebApplication1.Models.UserViewModel
@using (Ajax.BeginForm("Index", "Home", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "table", InsertionMode = InsertionMode.InsertBefore }, new { enctype = "multipart/form-data", model = Model }))
{
<input type="submit" value="Send Request">
<div id="table">
@{ Html.RenderPartial("UserPartial", Model);}
</div>
}
Widok UserPartial:
@model WebApplication1.Models.UserViewModel
<table>
<thead>
<tr>
<th>Imie</th>
<th>Nazwisko</th>
</tr>
</thead>
<tbody>
@foreach (var user in Model.Users)
{
<tr>
<td>@user.FirstName</td>
<td>@user.LastName</td>
</tr>
}
<tr>
<td>@Html.TextBoxFor(x => x.User.FirstName)</td>
<td>@Html.TextBoxFor(x => x.User.LastName)</td>
</tr>
</tbody>
</table>
Opis problemu : W metodzie Index (Get) przygotowuję pewne modele (2) i następnie przekazuję je do widoku. W danym widoku posiadam buttona "Send Request" który przenosi mnie do metody Post - jak dotąd jest okej, tylko teraz jest problem, parametr metody Post "model" nie przekazuje modeli które dodałem w metodzie Get, lecz tak jakby na nowo się inicjalizował. Wiem, że zamiast Ajax.BeginForm mógłbym użyć Html.BeginForm, ale zależy mi właśnie na wykorzystaniu ajaxa w tym przykładzie. Jest ktoś w stanie mi wytłumaczyć dlaczego w metodzie Post parametr jest na nowo inicjalizowany?