2015-01-08 3 views
0

У меня возникла проблема с вызовом метода контроллера, но он не имеет требуемого значения параметра, переданного ему: Любые идеи, в которых я ошибаюсь? (в настоящий момент параметр «query» равен null).MVC 5 - Ошибка маршрутизации

Действие контроллера

public ActionResult Search(string query, int page = 1) 
{ 
    if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page); 
    return View(new ApplicationSearchViewModel()); 
} 

Просмотр HTML

@model BluBrik.Mobile.WebUI.Models.ApplicationSearchViewModel 

@{ 
    ViewBag.Title = "Find Application"; 
} 

<h2>Search</h2> 

@using (Html.BeginForm("SearchResults", "Application", new { query = Model.SearchString })) 
{ 
    <div> 
     @Html.EditorFor(m => m.SearchString) 
     <input type="submit" value="Search" /> 
    </div> 
} 

Route.config

routes.MapRoute(
     name: null, 
     url: "Application/Search/{query}", 
     defaults: new { controller = "Application", action = "Search", query = UrlParameter.Optional } 
    ); 
+0

Первый раз, когда ваш вид нагрузок, делает ваш Model.SearchString имеет значение: новой {запрос = Модель .SearchString} –

+0

Нет, Model.SearchString является автоматическим свойством, которое вводится в представление после его загрузки. –

+0

Попробуйте это в вашей форме, @ Html.TextBoxFor (m => m.SearchString, new {id = "query", name = "query"}) И удалить это, новый {query = Model.SearchString из вашего @ Html.BeginForm() I я не уверен, что вы пытаетесь сделать. –

ответ

0

СТП L для элемента формы будет создан при загрузке страницы, а не в том случае, когда она будет отправлена ​​обратно. Поэтому ваше значение Model.SearchString в querystring не будет отражать значение в опубликованной форме.

Необходимо использовать данные сообщения. Вы также можете рассмотреть два действия контроллера, для GET и POST. Это даст вам:

Контроллера

[HttpGet] 
public ActionResult Search(string query, int page = 1) 
{ 
    if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page); 
    return View(new ApplicationSearchViewModel()); 
} 

[HttpPost] 
public ActionResult Search(ApplicationSearchViewModel model) 
{ 
    if (!string.IsNullOrWhiteSpace(model.SearchString)) return SearchResults(model.SearchString , 1); 
    return View(new ApplicationSearchViewModel()); 
} 

Посмотреть

@using (Html.BeginForm("Search", "Application", FormMethod.Post)) 
{ 
    <div> 
     @Html.EditorFor(m => m.SearchString) 
     <input type="submit" value="Search" /> 
    </div> 
} 
+0

Сняв мой код и пропустив мои заметки, я получил свой код, как и следовало ожидать. Тем не менее, я считаю, что это будет «правильный» способ сделать это, и я снова рассмотрю свой код позже, имея в виду это. благодаря –

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