0

ASP.NET MVCで、外部jsファイルにある関数を呼び出してjqueryUIモーダルダイアログを表示しようとしています。この理由は、jsメソッドをどこかに記述して、すべてのページにコピーして貼り付けるのではなく、いくつかのパラメーターを使用して呼び出す必要があるためです。

これは私のCustomFunctions.jsファイルです:

function CustomFunctions() { };

CustomFunctions.prototype.loadModalDialog = function (dialogDivID, callerElementDivID, dialogSize, actionControllerName, container)
{
  var dialogElement = $('#' + dialogDivID);
  var callerElement = $('#' + callerElementDivID);
  dialogElement.dialog
  (
    {
        autoOpen: false,
        show: "slide",
        width: dialogSize,
        resizable: false,
        modal: true
    }
  );

callerElement.click(function() 
{
    dialogElement.load("@Url.Action(" + actionControllerName +")", function() 
    {
        $(container).dialog('open');
    });
    return false;
})

}

今、私のList.cshtmlビューで、私は次のように書いています。

@Html.ActionLink(
        "click me", 
        "List", 
        new {string.Empty},
        new { onclick = "Javascript:showModal();" }
        );

@Scripts.Render("~/bundles/custom");
<script>
    function showModal()
    {
        var custom = new CustomFunctions();
        custom.loadModalDialog("my-dialog", "show-modal", 400, "List", this);
    }
</script>

問題は、モーダルダイアログがポップしないことです。クライアント側のデバッグでは、loadModalDialogに入り、すべての変数を適切に検出し、すべてのjsコードを調べ、エラーをスローしません(これは私を困惑させます)が、ダイアログを表示しません。

私は何かが足りないのですか?ありがとう、

4

1 に答える 1

2

これは外部jsファイルでは機能しません

"@Url.Action(" + actionControllerName +")"

これは、テンプレートがクライアントに送信される前に削除およびレンダリングされるため、テンプレートとインラインの場合に機能します。これが外部jsファイルに入れられると、それはリテラル文字列になります。

custom.loadModalDialog("my-dialog", "show-modal", 400, "List", this /*おそらく期待どおりではない*/);

コードのこの時点で渡すthisと、ドキュメントまたはウィンドウ オブジェクトのいずれかが渡されます。dialog('open')次に、期待しているダイアログ オブジェクトではないコンテナを呼び出そうとします。

document.readyイベント外で jquery を呼び出すという問題もあります。ページが読み込まれた後に呼び出されない限りshowModal()、jquery 関数は機能しません。

最新のクッパには、js をデバッグするための javascript/console があります。

于 2012-11-13T22:26:47.103 に答える