【问题标题】:Routing issue in MVC3 application on IISIIS 上的 MVC3 应用程序中的路由问题
【发布时间】:2012-01-13 05:18:20
【问题描述】:

我已经使用 razor 并使用 jquery(初学者级别)创建了 MVC3 应用程序,它工作正常。 之后,我在 IIS 上托管了这个应用程序(创建了 MVCDemo 虚拟目录),它工作正常,除非我使用 jquery 发出 post 请求

考虑以下使用 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 应用程序中全局处理这种类型的路由呢?

【问题讨论】:

  • 为什么不想在网址中添加MVCDemo?它是网址的部分

标签: jquery asp.net-mvc-3


【解决方案1】:

你需要在 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:(property) 之间的差异。

【讨论】:

  • 如果js像往常一样在js文件中会怎样?
【解决方案2】:

Jquery 将转到实际的 url。如果您只在浏览器中输入 /Wizard/ValidateUserName,它也不起作用。

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

【讨论】:

  • 您需要将根站点配置为指向您的 mvc 应用程序而不是虚拟目录的应用程序。
  • 不需要配置,只要检查一下我的答案在任何情况下都会起作用。
【解决方案3】:

这应该也可以:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    相关资源
    最近更新 更多