2

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

http://88.88.88.88/testapp/

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

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

当我将它与 Visual Studio 开发服务器一起使用时,它可以工作。但是当部署在 IIS 上时,它给了我 404 错误。

我试过了,

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

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

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

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

4

4 回答 4

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();

});
于 2013-08-01T13:06:01.747 回答
1

如果从视图中调用 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")';
于 2013-08-01T12:50:53.383 回答
1

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

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

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

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

要尝试的另一件事是:

'/Home/PrintApp'

我这么说是因为我自己在一个测试应用程序中生成了一个表单,这就是 URL 的样子。

于 2013-08-01T12:56:58.043 回答
1

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

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

或者

var printForm = jQuery('<form>', {
'method' : 'post',
'action' : '../../Home/PrintApp'
 .....});
printForm .submit();
于 2013-08-01T13:12:10.390 回答