首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >500 Ajax Get中的错误

500 Ajax Get中的错误
EN

Stack Overflow用户
提问于 2016-06-23 15:47:54
回答 2查看 118关注 0票数 0

我正在尝试发送一个下拉列表的选定值给控制器,并检索回json数据。

当我调试时,参数很好地到达控制器,值被很好地检索,但在控制台上返回部分后,它说

“加载资源失败:服务器响应状态为500 (内部服务器错误)`”

这是我的控制器操作:(在WebContentsController中)

代码语言:javascript
复制
[HttpGet]
public JsonResult GetWebContentTypeDetails (int id)
{
    var details = db.WebContentTypeDetail.Where(x=>x.WebContentTypeID == id).ToList();
    return Json(details, JsonRequestBehavior.AllowGet);
}

这是JS部件(打印到控制台进行测试)

代码语言:javascript
复制
$(document).ready(function () {
    $("#WebContentTypeID").change(function () {
        var ChangedID = $('#WebContentTypeID option:selected').val();
        alert(ChangedID);
        $.getJSON('/webcontents/GetWebContentTypeDetails/' + ChangedID, function (data) {
            console.log(data);
        })
    });
});

编辑:

WebContentTypeDetail模型

代码语言:javascript
复制
public partial class WebContentTypeDetail
    {
        public int WebContentTypeDetailID { get; set; }
        public int WebContentTypeID { get; set; }
        public string DetailKey { get; set; }
        public string Description { get; set; }
        public Nullable<short> Rank { get; set; }

        public virtual WebContentType WebContentType { get; set; }
    }

WebContentType模型

代码语言:javascript
复制
public partial class WebContentType
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public WebContentType()
        {
            this.WebContent = new HashSet<WebContent>();
            this.WebContentTypeDetail = new HashSet<WebContentTypeDetail>();
        }

        public int WebContentTypeID { get; set; }
        public string DisplayName { get; set; }
        public string CreatedByUserID { get; set; }
        public System.DateTime CreateDate { get; set; }
        public string LastEditedByUserID { get; set; }
        public Nullable<System.DateTime> LastEditDate { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<WebContent> WebContent { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<WebContentTypeDetail> WebContentTypeDetail { get; set; }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 03:12:51

您不能直接从上下文查询结果返回实体列表,因为它们在大多数情况下是不可序列化的,特别是在您的情况下:实体具有循环引用。

您有两个选项:

代码语言:javascript
复制
var details = db.WebContentTypeDetail.Where(x=>x.WebContentTypeID == id)

  1. 将您的结果映射到匿名对象列表:

返回Json(details.select(x=>new { //you data structure }).ToList(),返回视图模型并标记为[Serializable],然后将需要的数据返回给客户端:

return Json(details.select(x=>new YourViewModel {//您的数据结构}).ToList(),return Json

票数 1
EN

Stack Overflow用户

发布于 2016-06-23 17:04:21

试试这个:

代码语言:javascript
复制
$(document).ready(function () {
$("#WebContentTypeID").change(function () {
    var ChangedID = $('#WebContentTypeID option:selected').val();
    alert(ChangedID);
    $.getJSON('/webcontents/GetWebContentTypeDetails?id=' + ChangedID, function (data) {
        console.log(data);
    })
});
});

As参数id应作为querystring传递。如果你使用的是mvc,那么url应该在@url.action中传递,所以它必须是

代码语言:javascript
复制
$(document).ready(function () {
$("#WebContentTypeID").change(function () {
    var ChangedID = $('#WebContentTypeID option:selected').val();
    alert(ChangedID);
 var URL = @Url.Action("_GetWebContentTypeDetails", "webcontents");

    $.getJSON(URL + '?id=' + ChangedID, function (data) {
        console.log(data);
    })
});
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37985285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档