MVC3: нажатие кнопки отправки для отправки формы не приводит к частичному просмотру

#javascript #asp.net-mvc-3 #partial-views

#javascript #asp.net-mvc-3 #частичные представления

Вопрос:

Хорошо, вот в чем дело: я использую BeginRouteForm для отправки поиска. В любом случае, когда кнопка не настроена на отправку, и я нажимаю на кнопку, поиск выполняется нормально, и он ведет себя так, как должен, что означает, что содержимое отображается правильно. Когда для кнопки установлен тип отправки и нажата кнопка, возвращаемое содержимое представляет собой просто некоторый текст, а HTML не отображается вообще.

Важно отметить, что контроллер пытается вернуть частичное представление, которое использует javascript для замены части содержимого с помощью ajax (это означает, что тип содержимого «текст / javascript»).

Метод контроллера:

 public ActionResult Search()
{
  [Do Some Work]
  return JsView("Index.js");
}
 

JsView («Index.js «) просто устанавливает тип содержимого в «текст / javascript» и возвращает частичное представление, совпадающее с переданным параметром

Фрагмент формы:

 <div style="float:right;">
 @using (Html.BeginRouteForm(ControllerActionName, SearchRouteValues, FormMethod.Get, new { id = "worklistSearch" }))
 {
   <input type="text" placeholder="Search Cases" id="SearchCriteria" name="SearchCriteria" value="" />
   <input class="search image-button no-text filter" value="Filter" id="worklist-search-button" />
  }
 </div>
 

PS: Кажется, мне нужно сделать кнопку типом отправки, чтобы отправить форму с помощью клавиши ввода.

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

Ответ №1:

Судя по вашему описанию, похоже, что вы хотите захватить событие отправки для своей формы, а затем выполнить вызов AJAX для вашего контроллера. Если это то, что вы хотите, вам нужно предотвратить распространение события отправки, чтобы не происходило POST.

Используя jquery, сделайте что-то вроде этого:

 $("form").submit(function() {
    // make AJAX submission to controller
    // process JS returned from controller

    // stop submit event from propagating
    return false;
});