Проблема маршрутизации в приложении MVC3 на IIS - PullRequest
3 голосов
/ 13 января 2012

Я создал приложение MVC3 с бритвой и с помощью jquery (начальный уровень), и оно работает нормально.После этого я разместил это приложение на IIS (создал MVCDemo Виртуальный каталог), и оно работает нормально, за исключением случаев, когда я отправляю запрос с использованием jquery .

Рассмотрим следующий запрос, используя jquery

$.ajax({
            type: "POST",
            data: { 'username': $("#UserName").val() },
            async: false,
            url: "/Wizard/ValidateUserName",
            success: function (data) {
                if (data) {
                    $('#divUser').html("Username is  available");
                    $('#divUser').removeClass("field-validation-error");
                }
                else {
                    $('#divUser').html("Username is not available");
                    $('#divUser').removeClass("field-validation-valid");
                    $('#divUser').addClass("field-validation-error");
                }
                datavalue = data;
            },
            error: function (xhr, ajaxoptions, throwError) {
                alert(xhr.responseText);
            }
        });

, если я изменю URL: MVCdemo / Wizard / ValidateUserName , тогда это будет работать правильно, иначе выдает ошибку 404 .

Так, как я могу обработать этот тип маршрутизации глобально в приложении MVC3?

Ответы [ 3 ]

2 голосов
/ 13 января 2012

вам нужно использовать синтаксис бритвы MVC в функции jQuery.

Как показано ниже ........

 function checkUserAvailbility() {
    var datavalue = false;
    $.ajax({
        type: "POST",
        data: { 'username': $("#UserName").val() },
        async: false,
        url: '@Url.Action("ValidateUserName", "Wizard")',
        success: function (data) {
            if (data) {
                $('#divUser').html("Username is  available");
                $('#divUser').removeClass("field-validation-error");
            }
            else {
                $('#divUser').html("Username is not available");
                $('#divUser').removeClass("field-validation-valid");
                $('#divUser').addClass("field-validation-error");
            }
            datavalue = data;
        },
        error: function (xhr, ajaxoptions, throwError) {
            alert(xhr.responseText);
        }
    });
    return datavalue;
}

См. Разницу между url: (свойство) из jQuery.

0 голосов
/ 13 января 2012

Это также должно работать:

function checkUserAvailbility() {
    var datavalue = false;
    $.ajax({
        type: "POST",
        data: { 'username': $("#UserName").val() },
        async: false,
        url: "@Url.Content("~/Wizard/ValidateUserName")",
        success: function (data) {
            if (data) {
                $('#divUser').html("Username is  available");
                $('#divUser').removeClass("field-validation-error");
            }
            else {
                $('#divUser').html("Username is not available");
                $('#divUser').removeClass("field-validation-valid");
                $('#divUser').addClass("field-validation-error");
            }
            datavalue = data;
        },
        error: function (xhr, ajaxoptions, throwError) {
            alert(xhr.responseText);
        }
    });
    return datavalue;
}
0 голосов
/ 13 января 2012

Jquery собирается на фактический URL. Если вы добавите в браузер просто / Wizard / ValidateUserName, он тоже не будет работать.

Самый простой способ решить эту проблему - настроить iis для работы так, как вы ожидаете, поэтому вам не нужно добавлять префикс «MVCDemo» для виртуального каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...