在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;
}
它的作用是从名为CheckValue()的HomeController调用一个返回值的动作。
当我在我的视图页面中使用它时,它工作正常。但随后,我将其移至.js文件MyFunctions.js
并将该文件包含在我的视图中
<script src="@Url.Content("~/Scripts/MyFunctions.js")" type="text/javascript"></script>
并且ajax不再起作用了。 我收到警告“未找到”
关于这个问题的任何想法? 非常感谢
答案 0 :(得分:2)
问题是由于您的代码现在位于.js
文件中,但它包含C#
代码,特别是@Url.Action("CheckValue", "Home")
。不会编译或解释.js
个文件,因此会出现错误。此外,您的代码的结构方式不正确。由于AJAX调用是异步的,您需要在success
处理程序中返回值。
修复方法是将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>
答案 1 :(得分:0)
注入MVC控制器url的更好方法是通过服务器端渲染设置JS
@{
Layout = null;
Response.Expires = 120;
Response.CacheControl = "public";
Response.ContentType = "text/javascript";
}
MyApp = {};
MyApp.settings = {
checkValueUrl: "@Url.Action("CheckValue", "Home")"
};