我需要从控制器获取数据到View作为JSON格式,但它不起作用,我不明白为什么。
我的控制器(我在索引操作上请求它):
public class HomeController : Controller
{
CompanyTicketsDb _db = new CompanyTicketsDb();
public ActionResult Index()
{
var model =
_db.Tickets
.Select(r => new TicketListViewModel
{
Id = r.Id,
Name = r.Name,
Description = r.Description,
CompanyName = r.CompanyName,
Status = r.Status,
CompanyId = r.CompanyId,
});
if (Request.AcceptTypes.Contains("application/json"))
{
return Json(model, JsonRequestBehavior.AllowGet );
}
return View(model);
}
}
我的观点(这是局部视图)看起来像是(测试模式):
@model IEnumerable<MvcApplication4.Models.TicketListViewModel>
<button id="Button1">asd</button>
@section scripts {
<script src="~/Scripts/knockout-3.2.0.js"></script>
<script>
$(document).ready(function () {
$("#Button1").click(function (evt) {
type: 'GET'
url = '/';
dataType = 'json';
contentType = 'application/json';
success = function (data) {
alert(data);
console.log("asd");
};
error = function () { alert("Error retrieving employee data!"); };
});
});
</script>
}
问题是我没有得到任何消息(也不是allert或控制台日志)来测试返回的JSON是否有效所以之后我可以使用它们来填充View。
答案 0 :(得分:7)
因为你的语法错了。您正在使用'=',但您应该使用':'。
@model IEnumerable<MvcApplication4.Models.TicketListViewModel>
<button id="Button1">asd</button>
@section scripts {
<script src="~/Scripts/knockout-3.2.0.js"></script>
<script>
$(document).ready(function () {
$("#Button1").click(function (evt) {
$.ajax({
type: 'GET'
url : '/';
dataType : 'json';
contentType : 'application/json';
success : function (data) {
alert(data);
console.log("asd");
};
error : function () { alert("Error retrieving employee data!"); };
});
});
</script>
}