Jak przeładować PartialView po wysłaniu formularza POST?

0

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> 
0

Wiem, jednak gdy przekazuje model to ładuje się sam partial view bez pozostałych elementów, bez styli itd.

0

POST działa dobrze.
Dlaczego return PartialView zwraca konkretnie widok bez ostylowania, bez tego co jest w widoku _Shared, zwraca czystego htmla

1 użytkowników online, w tym zalogowanych: 0, gości: 1