А ты пользуешься HTML помощниками? Теоретически они действительно полезны, например, вот так может выглядеть на MVC код создания тяга <form>:
@using (Html.BeginForm("Search", "Home", FormMethod.Get))
{
<input type="text" name="q" />
<input type="submit" value="Search" />
}
Помощник Html.BeginForm создаст за нас сам тег, обратиться к таблице route приложения, чтобы узнать, каким должен быть URL для атрибута action, чтобы попасть в контролер Home и метод Search и заполнит все сам.
Неужели так сложно написать тег <form> самому? В принципе не сложно, но если хочешь, чтобы URL определялся в соответствии с таблицей маршрутов route, то придется писать кучу кода:
@{
var context = this.ViewContext.RequestContext;
var values = new RouteValueDictionary{
{ "controller", "home" }, { "action", "index" }
};
var path = RouteTable.Routes.GetVirtualPath(context, values);
<form action="@path.VirtualPath" method="get">
<input type="text" name="q" />
<input type="submit" value="Search2" />
</form>
Когда я впервые все это увидел, то первая мысль, которая проскочила в голове - а почему бы просто не прописать адрес прямо в поле action:
<form action="/Home/Search" method="get">
<input type="text" name="q" />
<input type="submit" value="Search" />
</form>
Это прекрасно работает и если честно, то я именно так и поступаю во всех своих проектах по трем простым причинам:
Первая причина - я программист старой закалки и предпочитаю такие вещи писать самостоятельно и не вижу особой экономии времени и сил от использования помощников.
Вторая причина - я никогда не меняю URL и тем более не меняю route, поэтому использовать функции для получения корректного адреса мне на фиг не нужно.
Эти две причины достаточно распространены среди программистов старой закалки и может показаться, что Microsoft реально придумала никому не нужную фигню. Но у именно этого помощника действительно есть одно преимущество и оно в третьей причине, почему я игнорирую эти фишки.
Я пишу код только для себя. Если ты пишешь код, который будет внедряться в какие-то другие проекты или пишешь систему управления контентом, то никогда не знаешь, какую таблицу маршрутов URL использует этот проект и в этом случае использование новых помощников действительно удобно.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Ну вообще все гораздо проще чем вы написали:
<form action="@Url.Action("Index", "Home")" method="get">
<input type="text" name="q" />
<input type="submit" value="Search2" />
</form>
вопрос может быть немного не по теме, я только приступил к изучению asp.net и мне интересен вопрос могу ли я использовать компоненты web-forms в mvc приложении, и если можно объясните почему да или нет
2razor
Url.Action - это все равно хелпер. Я же показал два варианта - с хелпером Html.BeginForm и без хелперов вообще.
2.iAlex
Никогда не делал компонентов WebForms и даже не знаю, что они из себя представляют
Уважаемый Михаил Евгеньевич! Позвольте поздравить вас с освоением ХТМЛ-помощников. Кстати, для инпутов тоже есть помощники. TextBox() там всякий. CheckBox удобен тем, что он сразу добавляет скрытое поле, а так мне пришлось бы это делать вручную.
Открою вам еще один секрет, я лично использую шаблоны, ну те что лежат в папочке Views\ControllerName\ DisplayTemplates, EditorTemplates. Раньше писал как лох
@Html.Partial(имя шаблона), теперь
@Html.EditorFor(m => m.SomeComplexProperty)
А кстати - если вам нужна форма с уже заполненными значениями, как будете их подставлять? Без помощников. Я действительно плохо представляю, как без гемора это сделать, может я чего-то не знаю.
А как насчет сообщений валидации? Для них тоже есть помощники.
Ну еще. Есть же некоторая семантика использования инструментов. Скажем, хелперы это часть ASP MVC, если используем MVC, то следует использовать и их. А то что же, саморезы забиваем, гвозди вкручиваем.
Я, наоборот, стараюсь не использовать голый html для вывода и редактирования данных, а использовать всю мощь хелперов.
Они помогают избегать дублирования. Когда потребуется, например, переделать генерацию кода для вывода одного из полей данных модели, ты меняешь один шаблон в одном месте - в DisplayTemplates (или EditorTemplates). И не скачешь по всем вьюхам, внося огромную кучу правок.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.