在我的MVC _layout页面上,我有一个按钮,其中包含一个带有iframe的面板。它使用C#和Razor
我想用另一个html页面的内容填充iframe,以使用 ControllerNameActionName Help.html等格式显示当前屏幕的帮助。
如何获取Ajax调用的当前控制器名称和操作名称?
(或者这是错误的方法吗?)
答案 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
我看似有效的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
}