我在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'
这不是最好的方法。有人可以确定问题是什么吗?
答案 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();