ASP.NET MVC5 - RenderPartial () не выполняется после возврата частичного представления - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующий код:

Вид :

@model IEnumerable<FormBuilder.Model.Formular>

<div id="divAktiveFormulare">
   @{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Aktiv).ToList()); }
</div>

<div id="divArchivierteFormulare">
    @{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Archiviert).ToList()); }
</div>

function btnArchivieren(e) {
   $.ajax({
       url: 'Url.Action("Archive", "Formular")',
       data: { id: e.target.name },
       success: function (data) {
          $('#divArchivierteFormulare').html(data);
       }
   });         
}

Контроллер :

public ActionResult Index()
{
     List<Formular> aktiveformulare = _formularManager.GetAllFormulare();
     return View(aktiveformulare);
}  

public ActionResult Archive(int id)
{
      Formular formular = _formularManager.GetFormularByID(id);

      if (formular != null)
      {
           formular.Status = FormularStatus.Archiviert;
           _formularManager.UpdateFormular(formular);
      }

      return PartialView("Formular/TableAllFormulare", _formularManager.GetAllFormulare());
 }

Iесть два div (divAktiveFormulare и divArchivierteFormulare).В каждом из них представлен частичный вид.Частичные представления показывают таблицу элементов модели (модель IEnumerable), и у каждого есть отфильтрованная модель после перечисления (например, Html.RenderPartial("Formular/TableAllFormulare", model => model.Status == FormularStatus.Archiviert).

При загрузке страницы индекса дляВ первый раз все работает отлично.Я могу установить точку останова на RenderPartial() -линии, и она остановится на этом.Оба частичных представления правильно отображают свои таблицы после отфильтрованной модели.

На моей странице у меня есть кнопка, и при нажатии на нее запускается Javascript btnArchivieren, который отправляет ajax на контроллер.Действие вернет Partial View() с обновленной моделью.

Но теперь моя точка торможения на RenderPartial() больше не будет срабатывать.Да, div обновляется, да, но без фильтрации модели для частичных представлений (Model.Where(model => model.Status == FormularStatus.Archiviert).Оба частичных представления показывают таблицу без фильтрации по перечислению.Как я уже сказал, моя точка торможения даже не сработала.

Что я делаю не так?Почему строки RenderPartial() не выполняются после возврата частичного представления из контроллера с обновленной моделью?

1 Ответ

0 голосов
/ 17 декабря 2018

Когда вы используете:

@{ Html.RenderPartial("Formular/TableAllFormulare", Model.Where(model => model.Status == FormularStatus.Aktiv).ToList()); }

Вы говорите своему приложению, что оно должно вызвать ваше частичное представление "Formular / TableAllFormulare" с данными, которые вы предоставили.

Это делается только тогда, когдарендеринг всей страницы, не вызывая ее в ajax.

Это код в этом частичном представлении, который будет выполнен вызовом ajax.

В любом случае, я бы предложил поместить вашу точку останова вваш контроллер в этой строке:

Formular formular = _formularManager.GetFormularByID(id);

Ибо именно эта строка будет обнаружена, и, вероятно, там, где скрывается ошибка.


РЕДАКТИРОВАТЬ:

ВыЯ просто должен сделать это:

return PartialView("Formular/TableAllFormulare", _formularManager.GetAllFormulare().Where(model => model.Status == FormularStatus.Archiviert).ToList());

Я надеюсь, вы понимаете, почему это не сработает так, как вы ожидали, поэтому скажите мне, если вы этого не сделаете.Я постараюсь объяснить это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...