понедельник, 12 сентября 2011 г.

Особенность Html.TextBoxFor() в ASP.NET MVC 2

Если вы активно используете HTML хелперы в ASP.NET MVC фреймворке, вам наверняка известен TextBoxFor() - о нем и пойдет речь.

Допустим, вы создаете форму с методом GET с целью организовать фильтр.

Контроллер и модель:

public class HomeController : Controller
{
    private static readonly string[] Fields = new[] {"Ann", "George", "Fred", "Amanda"};

    public ActionResult Search(SearchModel searchModel)
    {
        searchModel = searchModel ?? new SearchModel();
        searchModel.Field = searchModel.Field ?? string.Empty;

        searchModel.Field = Fields.FirstOrDefault(x => x.Contains(searchModel.Field));

        return View(searchModel);
    }
}

public class SearchModel
{
    public string Field { get; set; }
}

Представление:

<% using (Html.BeginForm("Search", "Home", FormMethod.Get)) { %>
    <%= Html.TextBoxFor(x => x.Field) %>
<% } %>
<form action="<%= Url.Action("Search") %>" method="get">
    <input id="Field" name="Field" type="text" value="<%= Model.Field %>" />
</form>

Запустив приложение, получим:

Введем во второе поле "g" и отправим форму нажатием на Enter. Вот что придет в ответ:

Почему в первом поле "g", когда должно быть "George", как во втором? Все просто, фреймворк анализирует строку запроса, и предпочитает значение Field=g из нее значению, приходящему в модели (Model.Field), что не плохо учитывать при разработке.

При этом, если интересно, вот во что рендерится представление:


Комментариев нет:

Отправить комментарий