对于这样的解决方案,我建议您在 BookController 上创建一个带有“JavascriptActionResult”或新“JavascriptActionResult”的 JavascriptController,以及输出所需 javascript 的视图。这样,您可以使用 razor 动态编写 Javascript,并且还可以保证您的 MVC 的路由模式行为将被遵循。有了所有这些,页面将是:
<script type="text/javascript" src="@Url.Action("GetAllBooksJS","Book")"></script>
PS:MVC 中没有原生的 JavascriptActionResult,但您可以扩展 ActionResult 以执行该操作,或者在经典的 ActionResult 函数中简单地强制 Content-Type。
Bellow 是我在 MVC3 中制作的一个工作案例。
控制器:
public class BookController : Controller
{
//
// GET: /Book/
public ActionResult Index()
{
return View();
}
public JsonResult GetAllBooks() {
return Json(new[] { new { name = "Book1" }, new { name = "Book2" } });
}
public ActionResult GetAllBooksJS()
{
Response.ContentType = "text/javascript";
return View();
}
}
索引视图:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<script type="text/javascript" src="@Url.Content("~/scripts/jquery-1.7.1.min.js")"> </script>
<script type="text/javascript" src="@Url.Action("GetAllBooksJS","Book")"></script>
</head>
<body>
<div>
<button>Get books ajax</button>
</div>
</body>
</html>
GetAllBooksJS 视图:
@{
Layout = null;
}
$(document).ready(function(){
$('button').on('click',function() {
GetBooksAjax();
});
});
function GetBooksAjax() {
$.ajax({
url: '@Url.Action("GetAllBooks","Book")',
type: 'POST',
dataType: 'json',
success: function(oJSON) {
$.each(oJSON,function(){
alert(this.name);
})
}
})
}
GetAllBooksJS View v2,在第二个版本中,一旦索引视图加载了 Javascript,就会进行 Ajax 调用,我想这就是你的情况:
@{
Layout = null;
}
function GetBooksAjax() {
$.ajax({
url: '@Url.Action("GetAllBooks","Book")',
type: 'POST',
dataType: 'json',
success: function(oJSON) {
$.each(oJSON,function(){
alert(this.name);
})
}
})
}
GetBooksAjax();