2016-12-07 3 views
0

У меня есть частичный вид, который показывает окно поиска с несколькими вариантамиMVC parial вид собирается получить метод, а не пост на представить

model PatientSearchViewModel 

@using (Html.BeginForm("Index", "Patient", FormMethod.Post, new { @class = "form-inline" })) 
{ 
    <form class="form-inline"> 
     <label style="padding-right:20px;">Search for a patient</label> 
     @Html.EditorFor(model => model.SearchText, new { htmlAttributes = new { @class = "form-control", placeholder = "Search...", autocomplete = "off" } }) 
     <div class="checkbox"> 
      <div class="checkbox" style="padding-left:20px; padding-right:20px;"> 
       <label>@Html.EditorFor(model => model.ShowOnlyOpenClients) Show only open clients</label> 
      </div> 
     </div> 
     <button type='submit' name='seach' id='search-btn' class="btn btn-primary"><i class="fa fa-search"></i>Search</button> 
    </form> 
} 

Когда кнопка отправки ударен я хочу, чтобы перейти к моему метод ниже с уже заполненным содержимым поиска, однако вместо этого он переходит к методу HttpGet, который возвращает null для параметра PatientSearchViewModel.

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Index(PatientSearchViewModel patient) 
    { 
     PatientSearchViewModel patientVM = GetSearchResults(patient); 
     return View(patientVM); 
    } 

Может кто-нибудь объяснить, как я могу заставить это работать?

+0

У вашей частицы есть вложенные формы, которые являются недопустимыми html и не поддерживаются (удалите тег '

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

ответ

0

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

  1. Как вы делаете использование атрибута [ValidateAntiForgeryToken] поэтому вам нужно добавить оператор @Html.AntiForgeryToken(); это в вашем partial view внутри @using(Html.BeginForm()){ } блок.
  2. Еще одна вещь убедитесь, что ваш метод действия будет находиться внутри PatientController.

Для справки (это мой код)

@model WebApplication.Models.PatientSearchViewModel 

@using (Html.BeginForm("Index", "Patient", FormMethod.Post, new { @class = "form-inline" })) 
{ 
    @Html.AntiForgeryToken(); 

    <label style="padding-right:20px;">Search for a patient</label> 
    @Html.EditorFor(model => model.SearchText, new { htmlAttributes = new { @class = "form-control", placeholder = "Search...", autocomplete = "off" } }) 
    <div class="checkbox"> 
     <div class="checkbox" style="padding-left:20px; padding-right:20px;"> 
      <label>@Html.EditorFor(model => model.ShowOnlyOpenClients) Show only open clients</label> 
     </div> 
    </div> 
    <button type='submit' name='seach' id='search-btn' class="btn btn-primary"><i class="fa fa-search"></i>Search</button> 
} 

Предложение: Как вы уже использовали @using(Html.BeginForm()), которые каким-либо образом будет конвертировать в <form> теге таким образом, вместо того, чтобы использовать другой <form class="form-inline"> внутри он создает путаницу, пожалуйста, вы можете удалить его.

Я надеюсь, что это решит вашу проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^