我对MVC很新,因此无法在我的DBContext中使用表中的数据填充DropDown列表。我有以下设置:
在我的控制器中,我有以下ActionResult:
public ActionResult Index()
{
DBContext db = new DBContext();
return View(db.Customers);
}
然后我正在强烈地输入我的观点:
@model System.Collections.Generic.IEnumerable<MicrossDashboard.DB.Customer>
然后在同一视图中我试图将其绑定到下拉列表:
<div class="form-group">
<label for="Customer" class="col-sm-2 control-label">Customer:</label>
<div class="col-sm-2">
<span hidden id="customerValue">@customer.ToString()</span>
@(Html.Kendo().DropDownList().Name("ddlCustomer").DataTextField("CustomerName").DataValueField("pk_Customer_ID").BindTo(Model))
</div>
</div>
我很确定就是这样。当我尝试运行该页面时,我收到以下错误:
在序列化“MicrossDashboard.DB.Customer”类型的对象时检测到循环引用。
我错过任何明显的东西吗?
答案 0 :(得分:0)
在序列化“MicrossDashboard.DB.Customer”类型的对象时检测到循环引用。
该类在其中一个属性中引用自身。作为简化示例,请考虑以下事项:
public class MyClass
{
public int MyInt { get; set; }
public MyClass Inner { get { return this; } }
}
如果你要尝试序列化这个,让我们对JSON说,你最终会得到:
{
"myInt" : 0,
"inner" : {
"myInt" : 0,
"inner" : {
"myInt" : 0,
"inner" {
// and so on, infinitely
}
}
}
}
因此,没有该类的实例可以序列化,因为它会导致无限量的数据(更不用说溢出的堆栈)。
您的示例可能 显而易见,但问题仍然存在于您的MicrossDashboard.DB.Customer
课程中。在其属性中的某个位置,可能是多个深层,该类的实例引用自身。
有多种方法可以“忽略”字段进行序列化。选项包括the JsonIgnore
attribute,the ScriptIgnore
attribute,省略the DataMember
attribute等。这取决于您执行序列化的方式。