2

ユーザーがコントローラーでアクションを呼び出したときに表示される通知を取得しようとしています。これはほとんどのアクションでAjax.ActionLink正常に機能しますが、アイテムを削除するために を使用しているため、ページが更新されず、javascript 関数が呼び出されないため、通知が表示されません。

私の_Layoutページには、以下に示す通知システムがあります。

<script type="text/javascript">
    //Used to display and close the system notifications
    $(document).ready(function notify() {
        $("#NotificationBox").show("slide", { direction: "down" }, 1000);
        if ($("#NotificationAutoHide").val() == "true") {
            $("#NotificationBox").delay(5000).hide("slide", { direction: "down" }, 1000);
        }
    });
</script>

<div id="NotificationDiv">
    @if (TempData["Notification"] != null)
    { 
        @Html.Hidden("NotificationAutoHide", TempData["NotificationAutoHide"])
        <div id="NotificationBox" class="@TempData["NotificationCSS"]" style="display: none">
             @TempData["Notification"]
        </div>
    }
</div>

Indexビュー (レイアウト ページを使用) には、コントローラーでアクションAjax ActionLinkを呼び出すがあり、必要なプロパティも入力されます。DeleteTempData

@Ajax.ActionLink("Delete", "Delete", "MyController",
    new { id = item.UserID },
    new AjaxOptions {
        HttpMethod = "Delete",
        OnBegin = "JSONDeleteFile_OnBegin",
        OnComplete = "notify"
    },
    new { @class = "delete-link" })

のオプションnotifyから関数への呼び出しを追加することですべてが機能すると思いましたが、残念ながらこれは機能していないようです。OnCompleteActionLink

TempDataコントローラーからa を介して返送することを提案する例をいくつか見ましたJsonResultが、それを既存のコードに結び付ける方法がわかりません。(私のコントローラーは、他の用途のために既に JsonResult オブジェクトを返します)

TempDataAjax 呼び出しから戻ってきて、通知システムを実行するのを手伝ってくれる人はいますか?

ありがとうございました。

4

2 に答える 2

0

notifyAJAX 成功コールバックから呼び出すことができるように、関数が公開されていることを確認してください。

<script type="text/javascript">
    function notify() {
        $("#NotificationBox").show("slide", { direction: "down" }, 1000);
        if ($("#NotificationAutoHide").val() == "true") {
            $("#NotificationBox").delay(5000).hide("slide", { direction: "down" }, 1000);
        }
    }

    $(document).ready(notify);
</script>

関数を宣言した方法notifyにより、この関数をスコープ外から呼び出すことができなくなります。

$(document).ready(function notify() { ... });

これが有効な JavaScript 構文であるかどうかさえわかりません。使っている人を見たことがない。

于 2012-08-29T07:41:46.047 に答える
0

TempData はサーバー側のコードなので、可能ではないと思います。この情報は JsonResult で返す必要があります。

例:

public JsonResult Delete(int id)
{
  //何かをする
  return Json(new {param1 = "必要なもの", param2 = "詳細"}, JsonRequestBehavior.AllowGet);
}
于 2012-08-28T20:57:39.340 に答える