繁体   English   中英

从jQuery调用动作控制器

[英]Call Action Controller from jQuery

我有一个jQuery TabControl的控制器。

public class MainFrameController : Controller
{
    public ActionResult AddTab(int menuItemId)
{
return View("Index");
}               }
public void RemoveTab( string menuInstanceName)
{
}
}

MaineFrame.NewTab方法和MainFram.RemoveTab方法-使用现有标签更新词典。

从视图中添加和删除选项卡,我有jQuery脚本:

$(function () {
var tabTitle = $("#tab_title"),
tabContent = $("#tab_content"),
tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>",
     tabCounter = 2;

var tabs = $("#tabs").tabs();


// close icon: removing the tab on click
tabs.delegate("span.ui-icon-close", "click", function () {
    var panelId = $(this).closest("li").remove().attr("aria-controls");
    $("#" + panelId).remove();

 // !!!!here I want to call MainFrame.RemoveTab action controller form panelId  !!!!

    tabs.tabs("refresh");
});

//remove the panel
tabs.bind("keyup", function (event) {
    if (event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE) {
        var panelId = tabs.find(".ui-tabs-active").remove().attr("aria-controls");
        $("#" + panelId).remove();
        tabs.tabs("refresh");
    }

});
});

我需要在jQuery内部调用Controller Action(在此行:// !!!!这里我要调用MainFrame.RemoveTab动作控制器窗体panelId !!!!)

最后,我发现了如何:

 $.post("/MainFrame/RemoveTab",
        { menuInstanceName: panelId },
        function (data,status) {
            alert("\nStatus: "+ status);
        }
    );

但是我还有另一个问题:虽然在开发人员机器上可以正常工作,但是$ .post在生产服务器上不起作用。 ...而且我不明白为什么:我检查并再次检查文件在生产服务器上是否正确更新-它们是。

...我发现了为什么在生产服务器上不起作用:在生产服务器上,根路径类似于{domain} / {virtual dir},而jQuery创建的路径从{domain}开始。 因此,我尝试使用类似以下内容的Url.Content:

$.post('@Url.Content("~/MainFrame/RemoveTab")',
        { menuInstanceName: panelId },
        function (data,status) {
            alert("Status: "+ status);
        }
    );

不幸的是,它也无法正常工作(与Url.Action的结果相同)。 怎么了?

我找到了一个可行的解决方案:

        $.post('RemoveTab',
        { menuInstanceName: panelId },
        function (data,status) {
            //alert("Status: "+ status);
        }
    );

当我需要启动的动作在同一控制器中时,如果没有,则在起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM