-1

在 asp.net MVC3 应用程序中,我有这个 jquery ajax 函数

function CheckValue() {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: '@Url.Action("CheckValue", "Home")',
        async: false,
        success: function (Value) {
            Returnvalue= Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }

    })
    return Returnvalue;
}

它所做的是从 HomeController 调用一个名为 CheckValue() 的操作,该操作返回一个值。

当我在我的视图页面中有它时,它工作正常。但随后,我将其移至 .js 文件MyFunctions.js并将该文件包含在我的视图中

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>

并且 ajax 不再工作了。我收到“未找到”警报

对这个问题有任何想法吗?非常感谢

4

2 回答 2

2

问题是由于您的代码现在在.js文件中,但它包含C#代码,特别是@Url.Action("CheckValue", "Home"). .js文件没有被编译或解释,因此你得到的错误。此外,您的代码的结构方式不正确。success由于 AJAX 调用是异步的,您需要在处理程序中返回值。

解决方法是将 url 作为函数的参数传递:

function CheckValue(url) {
    var Returnvalue ="";
    $.ajax({
        type: 'POST',
        url: url,
        async: false,
        success: function (Value) {
            return Value;
        },
        complete: function (IsValid) {
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }    
    })
}

然后在您的页面中,您可以将 C# 变量传递给 javascript 函数:

<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>
<script type="text/javascript">
    CheckValue('@Url.Action("CheckValue", "Home")');
</script>
于 2012-04-27T09:45:11.697 回答
0

注入 MVC 控制器 url 的更好方法是通过服务器端呈现的设置 JS

@{
    Layout = null;
    Response.Expires = 120;
    Response.CacheControl = "public";
    Response.ContentType = "text/javascript";
}

MyApp = {};
MyApp.settings = {
    checkValueUrl: "@Url.Action("CheckValue", "Home")"
};
于 2012-04-27T12:04:47.077 回答