【发布时间】:2011-04-22 15:00:36
【问题描述】:
我的应用有一个类似于 Facebook 中的“显示所有 cmets”。当用户单击“全部显示”链接时,我需要更新我的列表,该列表最初最多包含 4 个 cmets,其中包含所有 cmets。我会先展示一些代码,然后再问一些问题:
jQuery:
ShowAllComments = function (threadId) {
$.ajax({
type: "POST",
url: "/Home/GetComments",
data: { 'threadId': threadId },
dataType: "json",
success: function (result) {
alert(result);
},
error: function (error) {
alert(error);
}
});
};
Home Controller:
// GET: /GetComments
[HttpPost]
public JsonResult GetComments(int threadId)
{
var comments = repository.GetComments(threadId).ToList();
return Json(comments );
}
问题:
当我尝试 GET 而不是 POST 时,我收到此错误:“此请求已被阻止,因为在 GET 请求中使用敏感信息可能会泄露给第三方网站。要允许 GET 请求,将 JsonRequestBehavior 设置为 AllowGet。”发出这些 ajax 请求时,通常建议使用 POST 而不是 GET 吗?如果没有,我如何让它与 GET 一起工作?在哪里将 JsonRequestBehavior 设置为 AllowGet?
将其更改为 POST 后,我现在收到此错误:序列化“Models.Thread”类型的对象时检测到循环引用。我正在使用 Entity Framework 4,并且我读过在导航属性上添加一个 [scriptignore] 属性可以解决这个问题,所以我添加了一个带有属性的实体的部分类,它说“属性已经定义”。那我该如何处理,因为我无法直接修改 EF4 生成的代码。
【问题讨论】:
-
我不知道答案,但是您可以尝试在 EF4 中使用 POCO 对象吗?这应该消除任何可能导致这种情况的额外类成员。
-
这是我第一次尝试使用 EF 和 MVC,所以我选择了默认值。我希望我现在可以做些什么来解决这个问题,因为我需要把这个网站弄出来,而且我不得不考虑在某个时候切换到 POCO。
-
这可能不是真的......通常使用 ORM 时,POCO 会被东西包裹起来......所以延迟加载工作......这很可能是导致这个循环引用问题的原因。
标签: c# .net jquery asp.net-mvc entity-framework