Это может показаться немного глупым занятием, но это что-то Тем не менее я хочу учиться.
Прямо сейчас в ASP.NET MVC 3.0 вам необходимо использовать синтаксис @using (Html.BeginForm ()) {
, а затем }
, чтобы закрыть блок формы, чтобы получить новый причудливый «ненавязчивый javascript», чтобы вы не захотели писать все вручную (что нормально).
По какой-то причине ( Прочтите: * OCD *
) Я не Мне это нравится. Я бы предпочел это сделать ..
@Html.BeginForm()
@Html.EndForm()
Еще не кажетесь глупым? Ага, ну каждому свое. Я хочу понять, почему он работает так, как есть, и отредактировать его по своему вкусу. Поэтому я подумал, что первым делом я начну копать, это сам исходный код MVC 3.0. Итак, я прыгнул в codeplex, чтобы найти метод расширения BeginForm
.
( http://aspnet.codeplex.com/SourceControl/changeset/view/63452#288009 )
Итак, теперь я немного сбит с толку относительно того, как начать достижение моей цели. Читая код, я обнаружил, что все они идут вниз к корневому методу (неудивительно, поскольку большинство методов расширения кажутся иерархическими методами, все сводятся к одному, чтобы избежать избыточности).
private static MvcForm FormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary htmlAttributes) {
TagBuilder tagBuilder = new TagBuilder("form");
tagBuilder.MergeAttributes(htmlAttributes);
// action is implicitly generated, so htmlAttributes take precedence.
tagBuilder.MergeAttribute("action", formAction);
// method is an explicit parameter, so it takes precedence over the htmlAttributes.
tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(method), true);
HttpResponseBase httpResponse = htmlHelper.ViewContext.HttpContext.Response;
httpResponse.Write(tagBuilder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
}
Чего я здесь не вижу. вот как этот метод соотносится с ненавязчивым javascript. Если я просто наберу ..