0

これが JavaScript コールバック関数を部分ビューに渡す正しい方法かどうか疑問に思っています。そのため、部分ビューのビューによっては、異なることを行う場合があります。そこで、これを実現するために JavaScript コールバック関数を渡します。

ここに、部分ビューを呼び出す汎用関数と、JavaScript コールバック関数を渡す場所を示します。

 function showAjaxMessage(targetDiv, ajaxMessage) {    
    var ajaxLoader = "<img src='Content/loader.gif' alt=''>";
    $(targetDiv).html("<p>" + ajaxLoader + " " + ajaxMessage+"</p>"); 
}

function getPartialView(actionUrl, targetDiv, ajaxMessage, cbFunc) {
    showAjaxMessage(targetDiv, ajaxMessage);

    $.get(actionUrl, { callback: eval(cbFunc).toString()}, function(result) {
        $(targetDiv).html(result);
    });
}

これは私がそれを呼び出す例です:

 getPartialView("Home/OpenLogin", "#divLogon", "Loading...", function() { alert('This is the call back function!'); test(); });

これは、コールバック関数を取得してモデルに保存するコントローラーです。次に、それを部分ビューに戻します。

 // returns a login dialog which will be injected 
    // into a placeholder div on the client
    public ActionResult OpenLogin(string callback)
    {
        var baseModel = new BaseModel();
        baseModel.cbFunc = callback;

        return PartialView("LoginDialog", baseModel);
    }

これが私の部分的なビューの例です。ご覧のとおり、コールバック関数を取得し、init 関数に設定しています。

@model MvcApplication8.Models.BaseModel

function init(cb){
    if(cb!=undefined){
        cb();
    }
    else{
        alert("undefined");
    }
}

function test(){
    alert("Testing my call back");
}


$(function () {

   init(@Html.Raw(@Model.cbFunc));


});

上記の解決策は機能しますが、頭に浮かぶ主な質問は、これが正しい方法ですか? コントローラーから部分ビューにコールバック関数を渡すのは間違っているように聞こえますが、他にどのように行うのでしょうか? 何か案は?

4

1 に答える 1

1

あなたの例に基づいて、コールバック関数を部分ビューに渡す理由がわかりません。部分ビューは、同じページの div 内にレンダリングされます。ページで関数を宣言して、レンダリングされた部分ビューで使用できるようにしないのはなぜですか?

于 2012-11-08T21:44:05.187 に答える