IIS上的MVC3应用程序中的路由问题

时间:2012-01-13 05:18:21

标签: jquery asp.net-mvc-3

我用razor创建了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 个答案:

答案 0 :(得分:2)

你需要在jQuery函数中使用MVC razor语法。

如下所示........

 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;
}

查看jQuery的url :(属性)之间的差异。

答案 1 :(得分:0)

Jquery将转到实际网址。如果您只在浏览器中放置/ Wizard / ValidateUserName,它也将无效。

解决问题的简单方法是将iis配置为以您期望的相同方式工作,因此您无需为虚拟目录添加“MVCDemo”前缀。

答案 2 :(得分:0)

这也应该有效:

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;
}