使用控制器和操作名称进行ajax调用

时间:2015-05-24 03:54:09

标签: jquery html ajax asp.net-mvc-3

在我的MVC _layout页面上,我有一个按钮,其中包含一个带有iframe的面板。它使用C#和Razor

我想用另一个html页面的内容填充iframe,以使用 ControllerNameActionName Help.html等格式显示当前屏幕的帮助。

如何获取Ajax调用的当前控制器名称和操作名称?

(或者这是错误的方法吗?)

3 个答案:

答案 0 :(得分:1)

您可以使用各种方法在c#中获取当前页面请求URL。

HttpContext.Current.Request.Url.AbsolutePath

表格的网址:http://host/controllername/methodname。然后你可以使用c#来爆炸它。获取控制器和方法名称段。现在使用它可以发送ajax调用到所需的控制器方法。

$("button").click(function(){
    $.ajax({
         url: "../ControllerName/ActionName", 
         success: function(result){
                $("#div1").html(result);
          }
         error: function(e){
          alert(e);
          }
     });
});

答案 1 :(得分:0)

在您看来,请尝试

<input id="IFramePath" type="hidden" value="@Url.Action("ActionMethodName", "ControllerName")"/>

并且在你的jQuery中不需要ajax。只是做

$('#myIframe').attr('src', $('#IFramePath').val());

替代方法

iframe本身

中包含路径
<iframe id="myIframe" style="display:none" src="@Url.Action("ActionMethodName", "ControllerName")"></iframe>

并在单击按钮时显示

$('#myButton').click(function(){
    $('#myIframe').show();
});

答案 2 :(得分:0)

从前面给出的评论和答案中,我意识到当我提出问题时,我并不完全理解我需要做什么。对不起。我现在意识到Ajax不是必需的,我可以从Window.Location.href

获取Controller和Action的值

我看似有效的Javascript / jquery如下所示

    $('#helpButton').click(function () {
        $("#helpPanel").load(getHelpPageName());
        $("#helpPanel").animate({ height: 'toggle' }, 500);
     });

function getHelpPageName() {
    var page = "Home";

    var params = window.location.href.toString().split(window.location.host)[1];

    //remove the '/' that will be the 1st character
    params = params.substring(1);

    if (params.length == 0) {
        return page + ".html"; // no params - it's home page
    }

    var paramList = params.split('/');

    if (paramList.length === 1) //controller, no action
        page = paramList[0];
    else if (paramList.length >= 2) //controller and action - ignore rest
        page = paramList[0] + paramList[1];

    return page + ".html"; // home page - no controller, no action
}