MVCフレームワークに
@Ajax....
とき、それは2番目のバージョンでしかなく、
@Ajax....
などのヘルパーに直面してい
@Ajax....
率直に言って、クライアント側での実装は感心しませんでした。 いいえ、いいえ、私は自分自身に思った、私は私の
$.ajax
でjQueryを持っている、私はそれを私の目に持っています。 だから、3年目のリリースでこの瞬間を逃してしまったことを、残念ながら数年間忘れていました。 何だった。 幸運なことに、MVC 4について2冊の本を読んで考えました。次に、上記のヘルパーのおかげでコード行の記述を減らす方法を説明します。
そもそも、MVCは2つのバージョンのAjaxライブラリ(もちろん、ボックスを意味しますが、それ以上のことはありません)-jQueryとMicrosoft Ajaxで動作します。 どのアダプターのマークアップを作成するかを知るために、
web.config
UnobtrusiveJavaScriptEnabled
設定があり、対応する値は
true
(jQueryを使用する場合)および
alse
(Microsoft Ajaxを使用する場合)です。 1つのビューの値のみを変更する必要がある場合は、メソッド
@{Html.EnableUnobtrusiveJavaScript(bool);}
使用できます。 この設定は、クライアント側の検証データの形成にも影響することに注意してください。
希望するオプションに応じて、適切なアダプターを接続する必要があります。 Microsoft Ajaxの場合
<script src="~/Scripts/MicrosoftAjax.js" type="text/javascript"></script> <script src="~/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
、jQuery用
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
上で書いたように、jQueryのバージョンは私にとっては問題ありません。 したがって、控えめなJavaScriptのパス(つまり、
web.config
with
/>
)に従い、最も単純なものから始めます。
アクションリンク
この問題を考慮してください。 リンクがあり、それをクリックすると、コンテナの内容を更新したいです。 前にやったこと。
スライスアクションメソッド
public ActionResult Index() { if (Request.IsAjaxRequest()) return PartialView("_IndexPartial"); return View(); }
Index
ビュー
<script type="text/javascript"> jQuery(function($) { $('#update-container').click(function(e) { e.preventDefault(); $.ajax({ url: '@Url.Action("Index", "Home")', success: function(data) { $('#container').html(data); } }); }) }) </script> <div id="container"> @Html.Partial("_IndexPartial") </div> @Html.ActionLink(" ", "Index", "Home", new {}, new {id = "update-container"})
_IndexPartial
パーシャルビュー
<div> </div>
ほとんどは、
Html. ActionLink(...)
などのヘルパーメソッドに精通してい
Html. ActionLink(...)
上記に示した
Html. ActionLink(...)
。 原則として、多くのコード行はなく、すでにそのようなプログラミングに慣れているように思われるので、すべては大丈夫ですが、私は非常に怠zyなプログラマーであり、私の能力の限りでは、清潔さとコードの削減のために戦っています。 したがって、プレゼンテーションを22行から5行に減らすことができます。そして、
Ajax.ActionLink(...)
が私の助けになります(もちろん、懐疑論者は
.load
$.get
.load
または
$.get
を使用できますが、本質的にはこれは変わらず、ビューを縮小しました。ビューは時々膨らみ始めます)
出来上がり、
Index
ビュー
<div id="container"> @Html.Partial("_IndexPartial") </div> @Ajax.ActionLink(" ", "Index", "Home", new {}, new AjaxOptions{UpdateTargetId = "container"}, new {id = "update-container"}) //id ,
2つの高度なメソッド
Html.ActionLink
と
Ajax.ActionLink
は、
AjaxOptions
オブジェクトという1つのパラメーターのみにあります。 彼について話しましょう。
Ajaxoptions
ご覧のように、原則として、彼は多くのプロパティを持っていませんが、一方で、オブジェクトであろうとライブラリであろうと、銀の弾丸を作成し始めると良いでしょう。
どのプロパティが何に責任があるのか、MSDNとは言えません。
プロパティを見てみましょう。
Confirm
類似
confirm(...)
HttpMethod
string
型、最も興味深いのは、MSが2つのメソッドのみ
HttpMethod
を強制したこと
HttpMethod
理由はわかりません。明らかに、アルゴリズムは、すべてが
GET
、
null
または
.Trim()
後の空の文字列ではないことです
InsertionMode
値が「
InsertAfter
」(コンテナの最後に挿入)、「
InsertBefore
」(コンテナの先頭に挿入)、または「
Replace
」(コンテナの内容を
Replace
)の列挙
Loading...
元の非表示要素
On.....
$.ajax
に似たjavascript関数
-
OnBegin
-beforeSend
-
OnComplete
complete
-
OnFailure
error
-
OnSuccess
success
Url
-ajaxリクエストから別のルート/コントローラー/アクション/パラメーターへのリクエストを解析する必要がある場合、個別のajaxリクエストアドレスへのリンク(必要に応じて下線を引く)
Ajaxヘルパーメソッド
最後に、私たちの生活を時折楽にする方法のプレートを提供したいと思います。
Ajax.ActionLink
| コントローラーアクションへのハイパーリンクを作成します。クリックすると、Ajaxリクエストが送信されます。 |
Ajax.RouteLink
| Ajax.ActionLink
に似ていますが、コントローラーアクションではなく、特定のルートへのリンクを作成します |
Ajax.BeginForm
| 特定のコントローラーアクションに入力を送信するフォーム要素を作成します |
Ajax.BeginRouteForm
| Ajax.BeginForm
に似ていますが、コントローラーアクションではなく、特定のルートでリクエストを送信します |
Ajax.GlobalizationScript
| 言語と地域の設定に関する情報を含むグローバリゼーションスクリプトへのリンクを作成します |
Ajax.JavaScriptStringEncode
| JavaScriptで安全に使用できるように文字列をエンコードします |
段階的な劣化の確保
この状況を考慮してください。 AjaxリクエストはJSON / XML /パーシャルビューを返します-すべてが正常ですが、ユーザーがJavaScriptを無効にしている場合、またはブラウザーがJavaScriptをまったくサポートしていない場合、このアプローチはまったく受け入れられません。 このような場合、ページをユーザーに完全に返す必要があります。 1つの解決策は、1つのアクションメソッドでワイヤリングを使用して、このリクエストがAjaxリクエストであるかどうかを判断することです。 これは、前述のように
Request.IsAjaxRequest()
を使用して実行できます。
問題の2番目の解決策は、2つの異なるアクションメソッドを作成することです。1つはAjaxリクエスト用で、もう1つは通常の方法です。 ユーザーから受け取ったコメントを保存する単純化されたタスクについて、このオプションを詳しく見てみましょう。
2つのアクションメソッドを作成します
[HttpPost] public ActionResult AddComment(string comment) { // return View(); } [HttpPost] public ActionResult AddCommentAjax(string comment) { // return Json(new {resultMessage = " !"}); }
AddComment
ビュー
<h3> !</h3>
フォームでのプレゼンテーション
<script type="text/javascript"> function OnSuccessComment(data) { alert(data.resultMessage); } </script> @using (Ajax.BeginForm("AddComment", new AjaxOptions { Url = Url.Action("AddCommentAjax"), OnSuccess = "OnSuccessComment", HttpMethod = "POST" })) { @Html.TextArea("comment") <input type="submit" value=" "/> }
仕組み
次のフォームはブラウザ用にレンダリングされます
<form id="comment-form" action="/Home/AddComment" method="POST" data-ajax-url="/Home/AddCommentAjax" data-ajax-success="OnSuccessComment" data-ajax-method="POST" data-ajax="true"> <textarea rows="2" name="comment" id="comment" cols="20"></textarea> <input type="submit" value=" "> </form>
@using (Html.BeginForm("AddComment", "Home"))
との違いは、追加の
data-
属性のみであることが
@using (Html.BeginForm("AddComment", "Home"))
ます。 つまり、無効なJavascriptの場合、フォームは
public ActionResult AddComment(string comment)
れます。 JavaScriptが有効な場合、アダプターは
data-
属性から
data-
読み取り、フォーム
data-
をインターセプトし、
public ActionResult AddCommentAjax(string comment)
要求を行います。 送信されたJSONの形式で成功した結果を取得し、指定されたjsで
OnSuccessComment
関数を処理します。
まとめ
私の記事の目的は、車輪の再発明をせずに、少し加速できることを示すことだけでした(私は自分で判断するだけです)。
本の章は、私にこの記事を書くきっかけになりました。
ASP.NET MVCのAjax(ASP.NET MVC 4が動作中)
そして
URLおよびAjaxのヘルパーメソッド(pro ASP.NET MVC 4)