これは少しばかげた試みのように思えるかもしれませんが、それでも私が学びたいことです.
現在、ASP.NET MVC 3.0 では、構文を使用する必要があり@using (Html.BeginForm()) {、その後}、フォーム ブロックを閉じて、手の込んだ新しい「邪魔にならない JavaScript」を取得する必要があります。 )。
どういうわけか ( Read: *OCD*) 私はそれが好きではありません。本当はこうしたほうが..
@Html.BeginForm()
<div class="happy-css">
</div>
@Html.EndForm()
まだ愚かに見えますか?ええ、まあ、それぞれに。なぜそれがどのように機能しているのかを理解し、自分の好みに合わせて成形したい. そのため、最初に掘り始めるのは MVC 3.0 ソース自体だと思いました。そこで、コードプレックスに飛び込んでBeginFormExtension メソッドを見つけました。
( http://aspnet.codeplex.com/SourceControl/changeset/view/63452#288009 )
だから今、私は自分の目標を達成する方法について少し混乱しています. コードを読んでみると、それらはすべてルート メソッドになっていることがわかりました (ほとんどの拡張メソッドは、冗長性を避けるためにすべてが 1 つのメソッドに到達する階層的なメソッドであるように見えるため、当然のことです)。
private static MvcForm FormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary<string, object> 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 にどのように関連しているかです。単純に入力すると..
<form action="/Controller/Action" method="post">
そして、私の検証をそのように入れます...
@Html.ValidationSummary(false)
目立たないjavascriptを取得しません。しかし、私が使用する場合
@using (Html.BeginForm()) {それから私はします。生成されたマークアップも調べましたが、実際には違いがわかりません。
さて、それは奇妙になります。入力するだけで...
@Html.BeginForm()次に、すべてのフォーム コードを入力すると、フォームが機能し、目立たない JavaScript が表示さ</form>れますが、最後に手動で入力する必要があります。@Html.EndForm()動作しません。しかし、それに加えて、 HTMLSystem.Web.Mvc.Html.MvcFormのすぐ下の出力ストリームにテキストが書き込まれるようになりました。<form action="/Controller/Action" method="post">
誰かが私を啓発および/または助けてくれますか?