ASP.NET MVC - Html.TextBox - значение не устанавливается через словарь ViewData - PullRequest
4 голосов
/ 07 августа 2009

У меня есть окно поиска на странице (фактически в частичном представлении, хотя я не уверен, что это актуально) с элементом управления Html.TextBox

 <%= Html.TextBox("query", ViewData["query"], new { style = "width: 90%;" })%>

Метод действия принимает «запрос» в качестве параметра, и я редактирую это значение, чтобы очистить строку, переданную в:

public ActionResult SearchQuery(string query) {  

   ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " "));  

Однако, когда он попадает в Html.TextBox, исходное значение запроса (в данном случае с подчеркиванием) сохраняется. Я вижу, что отредактированное значение находится в поле ViewData, например, если:

query == "data_entry"  

затем, после перехода в метод действия

ViewData["query"] == "data entry"

но значение, когда оно достигает представления, в Html.TextBox все еще равно "data_entry". Кажется, что существует конфликт между параметром метода действия «запрос» и параметром формы окна поиска «запрос». Кто-нибудь знает, что здесь происходит или есть ли другой способ передать значение?

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

Ответы [ 2 ]

5 голосов
/ 07 августа 2009

Html.Textbox помощник сначала ищет ModelState ( Источник ASP.NET MVC , строка InputExtensions.cs 183, строка 243 HtmlHelper.cs). Самым простым решением было бы удалить ModelState для «запроса»:

public ActionResult SearchQuery(string query)
{
    ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " "));

    ModelState.Remove("query");

    return View();
}
0 голосов
/ 07 августа 2009

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

public ActionResult SearchQuery(string query) 
{     
  ViewData["query"] = StringFunctions.ProperCasing(query.Replace("_", " "));
  return view(ViewData):
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...