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 回答