找不到IIS7的ASP.Net MVC2控制器路径

时间:2013-08-01 12:42:19

标签: asp.net-mvc

我在IIS7(集成池)中托管了一个MVC2应用程序。我用来访问应用程序的链接就像这样

http://88.88.88.88/testapp/

我正从我的'HomeController.cs'调用PrintApp函数,如下所示。

var printForm = jQuery('<form>', {
    'method' : 'post',
    'action' : 'Home/PrintApp'
     .....});
printForm .submit();

当我将它与visual studio developpement服务器一起使用时,这件事情有效。但是当部署在IIS上时,它会给我404错误。

我试过了,

'action' : '../Home/PrintApp'

但这也给了我同样的错误。唯一有效的是

'action' : 'http://88.88.88.88/testapp/Home/PrintApp'

这不是最好的方法。有人可以确定问题是什么吗?

4 个答案:

答案 0 :(得分:2)

您在某些事件中编写了以下javascript代码,该事件是在与某些DOM元素(如按钮或锚点)交互时触发的,对吗?

如:

$('#foobar').click(function() {
    var printForm = jQuery('<form>', {
        'method' : 'post',
        'action' : 'Home/PrintApp'
        .......
    });
    printForm.submit();
});

所以,你可以将表单的url作为data-*属性添加到相应的元素中:

<button id="foobar" data-url="@Url.Action("PrintApp", "Home")">Click me</button>

然后:

$('#foobar').click(function() {

    var printForm = jQuery('<form>', {
        'method' : 'post',
        'action' : $(this).data(url)
        .......
    });
    printForm.submit();

});

答案 1 :(得分:1)

如果从View中调用JavaScript,您可以使用它(这假设Razor视图引擎...对于ASPX,它会略有不同):

var printForm = jQuery('<form>', {
    'method' : 'post',
    'action' : '@Url.Action("PrintApp", "Home")'
     .....});
printForm .submit();

如果从其他地方调用它,则必须提供对控制器操作位置的完全限定引用。

编辑:这样的事情会起作用吗?

在.js:

function submitPrintForm(formLocation) {
    var printForm = jQuery('<form>', {
        'method' : 'post',
        'action' : formLocation
         .....});
    printForm .submit();
}

在视图中,无论您需要在何处调用该函数:

submitPrintForm('@Url.Action("PrintApp", "Home")';

答案 2 :(得分:1)

将此行'action' : 'Home/PrintApp'更改为:

'action' : $('#printAppUrl').val();

然后,在视图中的服务器端,将名为printAppUrl的隐藏字段的值设置为:

@Html.Hidden("printAppUrl", Url.Action("PrintApp", "Home"));

另一件要尝试的是:

'/Home/PrintApp'

我之所以这么说,是因为我自己在测试应用程序中生成了一个表格,就像URL一样。

答案 3 :(得分:1)

问题是绝对和相对路径。其中一个应该适合你:

var printForm = jQuery('<form>', {
'method' : 'post',
'action' : '~/Home/PrintApp'
 .....});
printForm .submit();

OR

var printForm = jQuery('<form>', {
'method' : 'post',
'action' : '../../Home/PrintApp'
 .....});
printForm .submit();