使用する場合:
new AjaxOptions
{
UpdateTargetId = "VoteCount" + indx,
OnSuccess = "AnimateVoteMessage"
}
すべて正常に動作しますが、自動的に割り当てられた ID を使用して、リスト内の項目をアニメーション化しようとしています。これらの各項目を JavaScript からアドレス指定できるようにしたいので、JavaScript にパラメータを渡す必要があると思います。ただし、次のコードを使用すると、
new AjaxOptions
{
UpdateTargetId = "VoteCount" + indx,
OnSuccess = "AnimateVoteMessage(2)"
}
「Sys.ArgumentUndefinedException: 値を未定義にすることはできません。」という例外が発生します。これは、MicrosoftMvcAjax.js のデバッグ バージョンを使用しているときに発生します。圧縮バージョンを使用すると、「Microsoft JScript ランタイム エラー: 'b' は null またはオブジェクトではありません」というエラーが発生します。
OnSuccess
私の質問は、イベントを使用して JavaScript 関数にパラメーターを渡すことができるかどうかActionLink
です。
これは正しいアプローチでしょうか? 他にどうすれば、1 つの JavaScript 関数をページ上の 10 個のアイテム (私の場合は複数の DIV の ID) で実行できるようになりますか?
ベストアンサー1
これを行うにはもっと良い方法があります - OnSuccess呼び出しが渡すことが期待される組み込みパラメータを使用します
組み込みパラメータ(少なくとも私がこれまでに見つけたもの)は、データ、ステータス、xhrです。
データ = アクションメソッドから返されるもの
ステータス = 成功した場合、このステータスは単に「成功」という文字列になります
xhr = ここでは説明しない一連の JavaScript を指すオブジェクト...
したがって、JavaScript を次のように定義します (不要な引数は省略できます。アクションから返されるデータだけが必要なので、データ引数のみを取得します)
function myOnSuccessFunction (data)
{
..do stuff here with the passed in data...
}
前に言ったように、データは ActionResult によって返される可能性のある JSON なので、コントローラーのアクション メソッドは次のようになります...
public ActionResult MyServerAction(Guid modelId)
{
MyModel mod = new MyModel(modelId);
mod.DoStuff();
return Json(mod, JsonRequestBehavior.AllowGet);
}
アクション リンクを次のように設定します...
@Ajax.ActionLink("Do Stuff", "MyServerAction", new { modelId = Model.Id }, new AjaxOptions { OnSuccess = "mySuccessScript(data);", OnFailure = "myFailureScript();", Confirm = "Are you sure you want to do stuff on the server?" })
これにより、実際にアクションを呼び出すかどうかを尋ねる確認メッセージ ボックスが作成されます。プロンプトで [はい] をクリックすると、コントローラーへの呼び出しが呼び出されます。呼び出しが返されると、データ引数には、アクション メソッドで返された JSON オブジェクトが含まれます。簡単です!
でも待ってください! 別のカスタム引数を渡したい場合はどうすればいいでしょうか?! 簡単です! リストの先頭に引数を追加するだけです...
これの代わりに...
function myOnSuccessFunction (data)
{
..do stuff here with the passed in data...
}
これを実行します (必要に応じて複数のカスタム引数を使用することもできます。必要に応じて追加してください)...
function myOnSuccessFunction (myCustomArg, data)
{
..do stuff here with the passed in data and custom args...
}
次に、セットアップで、ActionLink定義内のクライアント側スクリプトを通じて引数を取得するだけです...つまり
@Ajax.ActionLink("DoStuff", "MyServerAction", new { modelId = Model.Id }, new AjaxOptions { OnSuccess = "mySuccessScript(myClientSideArg, data);", OnFailure = "myFailureScript();", Confirm = "Are you sure you want to do stuff on the server?" })
OnSuccess パラメータの「myClientSideArg」は、必要な場所から取得できることに注意してください。このテキストを必要なものに置き換えるだけです。
お役に立てれば幸いです!