【发布时间】:2016-02-10 22:14:18
【问题描述】:
我遇到了一个我不知道如何解决的问题。 我有一个简单的控制器,它的返回类型是动态的,但它不工作。
public dynamic GetPosts()
{
var ret = (from post in db.Posts.ToList()
orderby post.PostedDate descending
select new
{
Message = post.Message,
PostedBy = post.PostedBy,
PostedByName = post.ApplicationUser.UserName,
PostedByAvatar = _GenerateAvatarUrlForUser(post.PostedBy),
PostedDate = post.PostedDate,
PostId = post.PostId,
}).AsEnumerable();
return ret;
}
如果我将此动态返回类型更改为 JsonResult 并将 return ret 替换为 return Json(ret, JsonRequestBehavior.AllowGet);它会起作用的。 在我使用 web api 控制器之前,它在动态返回类型下运行良好,但不知何故我遇到了一些问题,所以我决定使用普通控制器。 我有一个淘汰视图模型,它的工作是将帖子和评论动态附加到视图页面上。它是这样的---
function viewModel() {
var self = this;
self.posts = ko.observableArray();
self.newMessage = ko.observable();
self.error = ko.observable();
self.loadPosts = function () {
// to load existing posts
$.ajax({
url: postApiUrl1,
datatype: "json",
contentType: "application/json",
cache: false,
type: 'Get'
})
.done(function (data) {
var mappedPosts = $.map(data, function (item) { return new Post(item); });
self.posts(mappedPosts);
})
.fail(function () {
error('unable to load posts');
});
}
self.addPost = function () {
var post = new Post();
post.Message(self.newMessage());
return $.ajax({
url: postApiUrl,
dataType: "json",
contentType: "application/json",
cache: false,
type: 'POST',
data: ko.toJSON(post)
})
.done(function (result) {
self.posts.splice(0, 0, new Post(result));
self.newMessage('');
})
.fail(function () {
error('unable to add post');
});
}
self.loadPosts();
return self;
};
onButton 点击、发布和评论已正确保存在数据库中,但不会动态附加到视图页面。 我在这里上传错误图片-----
我不知道缺少什么。此错误消息指向什么。如何解决?如果缺少任何代码,请告诉我,我也会上传它
【问题讨论】:
-
使用
return Json(ret, JsonRequestBehavior.AllowGet);有什么问题? -
@nemesv 动态绑定查看页面无法正常工作,正如您在此演示中看到的 techbrij.com/…
-
你好像在服务器端出现异常,你试过调试吗?目前尚不清楚您当前使用的是否是 Api 控制器,我假设它是并建议将
dynamic(在方法签名中)更改为HttpResponseMessage和return ret;更改为return Request.CreateResponse(HttpStatusCode.OK, ret, Configuration.Formatters.JsonFormatter); -
我使用的是普通控制器..... api 控制器在路由@haim770 中引起了太多问题
-
那么为什么
dynamic,为什么不return Json(ret, JsonRequestBehavior.AllowGet);?
标签: jquery asp.net-mvc linq dynamic knockout.js