2013-08-01 3 views
2

У меня есть приложение MVC2, размещенное в IIS7 (интегрированный пул). Ссылка, которую я использую, чтобы получить доступ к приложению, как этоПуть ASP.Net MVC2 Путь не найден IIS7

http://88.88.88.88/testapp/ 

Я ссылающегося функцию PrintApp из моих «HomeController.cs», как показано ниже.

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

Эта вещь работает, когда я использую ее с визуальным студийным сервером разработки. Но при развертывании в IIS это дает мне ошибку 404.

Я попытался,

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

Но это также дает мне ту же ошибку. Единственное, что сработало, было

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

Это не лучший способ сделать это. Кто-нибудь может определить, в чем проблема?

+0

попробовать '~/Home/PrintApp' –

+0

@JeevanJose - это работает в .js файлы я постараюсь .. – vinayan

+0

Да? должно. –

ответ

1

Если JavaScript вызывается изнутри View, вы можете использовать это вместо того, чтобы (это предполагает Razor вид двигатель ... для ASPX, это будет немного отличаться):

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

Если быть вызывается из другого места, вам нужно будет предоставить полную ссылку на местоположение действия вашего контроллера.

EDIT: Будет что-то вроде этой работы?

В .js:

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

В представлении, где бы вам нужно вызвать функцию:

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

спасибо .. но он не вызывается из представления. – vinayan

+0

Где вы называете это? Будет ли мое редактирование работать? –

1

Измените эту строку 'action' : 'Home/PrintApp', это:

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

Затем, на стороне сервера в представлении, установите значение скрытого поля с именем printAppUrl:

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

Другое дело, чтобы попробовать это:

'/Home/PrintApp' 

я говорю, потому что после создания одной из форм себя в тестовом приложении это то, что URL выглядел.

+0

, который должен работать, я верю, но это больше похоже на обходное решение. – vinayan

+0

Это определенно будет работать, и я почти поддержал его, но он просто чувствует себя «грязным» решением. –

+0

@vinayan, вы также можете попробовать ''/Home/PrintApp''. –

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

проблема - абсолютные и относительные пути. Один из них должен работать для вас:

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

ИЛИ

var printForm = jQuery('<form>', { 
'method' : 'post', 
'action' : '../../Home/PrintApp' 
.....}); 
printForm .submit(); 
Смежные вопросы