【问题标题】:Call Action Controller from jQuery从 jQuery 调用动作控制器
【发布时间】:2014-05-03 15:58:51
【问题描述】:

我有一个用于 jQuery TabControl 的控制器。

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

方法 MaineFrame.NewTab si 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 中调用一个控制器动作(行在哪里:// !!!!这里我要调用 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 的结果相同)。 怎么了?

【问题讨论】:

  • 这里没有问题。

标签: jquery path controller action tabcontrol


【解决方案1】:

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

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

虽然我需要启动的操作在同一个控制器中,但如果没有,它正在工作......

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2012-09-14
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2021-04-22
    • 2010-09-29
    相关资源
    最近更新 更多