Mam problem z przeładowaniem PartialView, który pobiera dane z Modelu.
Workflow:
-
Kontroler przekazuje viewmodel DashboardTimeTablesViewModel do widoku.
-
Widok ładuje PartialView (który korzysta z tego powyższego modelu).
-
PartialView posiada przyciski, które wywołują okienko.
-
Okienko jest formularzem i wysyła dane metodą POST do akcji SaveTimeTable(DashboardTimeTablesViewModel model)
-
Jak zaimplementować powyższą akcję, aby przeładowała tylko PartialView bez odświeżenia reszty strony?
Może przedstawię klasy aby było jaśniej:
To jest moja akcja, która wyświetla tabelke (nagłówkami są dni tygodnia a w wierszu jest przycisk, który po naciśnięciu wyświetla okienko):
public ActionResult DashboardTimeTables(DashboardTimeTablesViewModel model)
{
//KOD KONTROLERA
return View(model);
}
Widok dla powyższego kontrolera:
@model CarPooling.Website.Models.DashboardTimeTablesViewModel
//Referencje i skrypty...
//Ten partialView ma być przeładowany
<div id="weekTablePartial" class="container">
@Html.Partial("~/Views/User/Dashboard_WeekTablePartial.cshtml", Model)
</div>
//Tu jest okienko, które wyświetli się po naciśnięciu przycisku (przycisk jest w PartialView)
@using (Ajax.BeginForm("SaveTimeTable", new AjaxOptions { UpdateTargetId = "ID", OnSuccess = "onSuccess" }))
{
//Tu jest kod dla formularza
}
Tu pojawia się problem, bo nie wiem jak ma wyglądać ten kontroler :(
[HttpPost]
public ActionResult SaveTimeTable(DashboardTimeTablesViewModel model)
{
if (!ModelState.IsValid)
{
return View();
}
var timeTable = _timeTableFactory.Create(model.DayOfWeek, model.ArrivalTime, model.DepartureTime, model.KindOfWeek);
ActiveUser.AddUserTimeTable(timeTable);
_timeTableRepository.Add(timeTable);
_userRepository.SaveOrUpdate();
return PartialView("Dashboard_TimeTables"); //W tym momencie leci błąd bo jak wywołam PartialView w ten sposób, to nie ma on Modelu.
}
Tu jest PartialView (zwykła tabelka z przyciskami):
@model CarPooling.Website.Models.DashboardTimeTablesViewModel
<div class="container">
@Html.Label("Week", "Choose week:", new { @class = "col-md-2 control-label" })
@Html.DropDownListFor(m => m.Weeks, Model.Weeks, new { @class = "form-control", @id = "weeks" })
<table class=table>
<thead>
<tr>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
<th>Sunday</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a data-id="Monday" title="Add time" class="open-addTimeTable btn btn-primary"
href="#addTimeTable">@Model.Days[DayOfWeek.Monday]</a>
</td>
<td>
<a data-id="Tuesday" title="Add time" class="open-addTimeTable btn btn-primary"
href="#addTimeTable">@Model.Days[DayOfWeek.Tuesday]</a>
</td>
//Cała reszta buttonów
</tr>
</tbody>
</table>
</div>