問題の解決策は既に言及されています (Html.Raw()) が、指定されたコード サンプルで @ を使用している理由がわかりません。見た目からすると、割り当てようとすると既にコード ブロックに入っているので、なぜカミソリを使用するのでしょうか。
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new { id = ViewBag.InputResourceID },
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = @myJSFunction
}))
する必要があります
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new { id = ViewBag.InputResourceID },
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = myJSFunction
}))
@ は、ページの StreamWriter に結果を応答に書き込むように指示するものであり、HtmlEncoding の後にページに挿入されることを意図しています。Html.Raw を使用すると、Html エンコーディングの側面がバイパスされますが、あなたのケースでは、自分でページを直接記述してHtml.BeginForm
いないため、それを処理できるため、関数の割り当てに @ は必要ありませんOnComplete
。
更新:わかりました、私が言及するのを忘れていたもう 1 つのことは、AjaxOptions に渡されるメソッドは Javascript 関数のみであり、見た目ではパラメーターがないことです。パラメータは、すべての配線を処理する控えめなスクリプトによって自動的に渡されます。したがって、フォームは次のようになります...
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new { id = ViewBag.InputResourceID },
new AjaxOptions {
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = "myJSFunction"
}))
そして、それは残りを処理します。関数に追加のパラメーターを渡す必要がある場合myJSFunction
は、おそらく他の方法でそれらを公開する必要があります。JavaScript変数として、またはそれを他の要素に関連付けて、を使用してアクセスします$("elementselector").data("dataAttributeName")
(これは私の推奨および推奨方法です)。目立たない ajax JavaScript ライブラリに対して要求される一般的な変更の 1 つは (Microsoft がこの変更を採用し、それを完了してくれることを望みます) this
、ajax イベントをトリガーした要素に のコンテキストを設定することです。したがって、この場合this
、フォーム要素と等しくなります。これらすべてを念頭に置いて、ここに私のお勧めがあります。
最初
に: Unobtrusive Ajax スクリプト ファイルを変更して、ソース要素がthis
キーワードに割り当てられるようにし、控えめなイベントを処理する JavaScript で使用できるようにします。
この質問は、その内容の概要を示しています(ファイルに 1 行追加されています)。
2番目:
フォームのデータ属性の1つに文字列を追加します
@using (Ajax.BeginForm(
"_MonthRanges",
"Projects",
new {id = ViewBag.InputResourceID},
new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "MonthRanges",
InsertionMode = InsertionMode.Replace,
OnComplete = "myJSFunction"
},
new { data_parameter_name = "myString" }))
3 番目:
イベントを処理する javascriptfunction 内からパラメーターにアクセスします。
<script>
function myJSFunction(data, textStatus, jqXHR)
{
//data, textStatus and jqXHR are set for you by the unobtrusive ajax script file automatically, feel free to use them
var parameter = $(this).data("parameterName");
alert(parameter);
}
</script>