2015-07-11 3 views
-1

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

@using (Html.BeginForm("Details", "Projects", FormMethod.Get)) 
{ 
<div class="row" style="margin-bottom: 20px;"> 
    <div class="col-lg-3 pull-right"> 
     <input type="search" class="form-control" placeholder="Search Code" id="projectSearch" name="code" /> 
    </div> 
</div> 
} 

Это должно отправлять сообщения в Projects Controller Подробности действий, однако этого не происходит, и я считаю, что это из-за [Маршрут] атрибут, который применяется к действию, как когда я закомментируйте, то правильно заполнять сообщения. Однако я хочу использовать атрибут [Маршрут].

Действие выглядит следующим образом:

[HttpGet] 
[Route("{code}/Details")] 
public ActionResult Details(string code) 
{ 
    if (code == null) 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     ... 
    return View(viewModel); 
} 

Когда атрибут используется форма будет добавите на этот адрес:

/Проекты/Детали кода = РР61

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

Ожидаемое/желаемого URL должен выглядеть

/Проекты/РР61/Детали

Это прекрасно работает, если я создаю Url.Action или перейдите к URL, так что я знаю, что это действие работает, однако оно не работает с сообщением формы. Любые идеи почему?

Спасибо.

ответ

0

У меня есть одно решение проблемы, однако оно не отвечает, почему это не работает в первую очередь. Я создал отдельное действие, которое для строки поиска POST, это действие затем перенаправляется на действие GET, которое я пытался достичь в первую очередь.

[HttpPost] 
public ActionResult ProjectSearch(string code) 
{ 
    if (code != "") 
    { 
     return RedirectToAction("Details", new { code }); 
    } 
    else 
    { 
     return RedirectToAction("Index"); 
    } 
} 

Это теперь работает правильно, но я бы все-таки хотелось знать, почему это не работает, чтобы начать с, если любое тело имеет какие-либо идеи. Приветствия.

0

Измените [HttpGet] на [HttpPost] на контроллере и FormMethod.Get на FormMethod.Post в представлении.

+0

Неа это не работает :( –

+0

Что делать, если вы удалите «[Маршрут (» {код}/подробности «)]»? –

+0

К сожалению, пропустил много РР61 здесь .. –

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