2014-02-11 128 views
0

我有一个使用MVC包装剑道UI下拉列表

代码

Html.Kendo.DropDownList() _ 
     .Name("MainCategories") _ 
     .HtmlAttributes(New With {.style = "width: 250px"}) _ 
     .DataTextField("CategoryName") _ 
     .OptionLabel("Select A Category") _ 
     .DataValueField("ID") _ 
     .DataSource(Function(source) 
         source.Read(Function(read) read.Action("GetCategories", "Home")) 
        End Function _ 
        ) _ 
    .Render() 


End Code 

我在控制器

Public Function GetCategories() As String 

    ' Dim dr As DataRow 
    Dim dt As New DataTable 
    Dim query As New LibQuery(LibSQL.ConString) 
    query.OpenNoTran() 
    Dim da As SqlDataAdapter = MainCategories.LoadAllMainCategoriesAdapt(query) 
    da.Fill(dt) 

    Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer() 

    Dim rows As New List(Of Dictionary(Of String, Object))() 
    Dim row As Dictionary(Of String, Object) 
    For Each dr As DataRow In dt.Rows 
     row = New Dictionary(Of String, Object)() 
     For Each col As DataColumn In dt.Columns 
      row.Add(col.ColumnName, dr(col)) 
     Next 
     rows.Add(row) 
    Next 
    Return serializer.Serialize(rows) 

    ' Return Json(da, JsonRequestBehavior.AllowGet) 

End Function 

并且通过检查IM返回具有的功能的剑术下拉列表json结果

[{"ID":1,"CategoryName":"Hair Dressing"}, 
{"ID":2,"CategoryName":"Gardening"}, 
{"ID":3,"CategoryName":"Animal Care"}, 
{"ID":4,"CategoryName":"Accounting"}, 
{"ID":5,"CategoryName":"Cleaning"}, 
{"ID":6,"CategoryName":"Automotive"}, 
{"ID":7,"CategoryName":"Another"}, 
{"ID":8,"CategoryName":"Costas Cooking"}, 
{"ID":9,"CategoryName":"cvb"}, 
{"ID":10,"CategoryName":"cvbcbvcbv"}, 
{"ID":11,"CategoryName":"cxxxxx"}, 
{"ID":12,"CategoryName":"MVC ABout Is Working"}, 
{"ID":13,"CategoryName":"Another MvC"}] 

由于某种原因,所有列表值(datatextvalue)在下拉列表中是“未定义的”,这很奇怪,即时通讯使用我自己的数据库连接文件,应该没问题。也许是因为我没有使用JsonResult?有任何想法吗。

谢谢

回答

1

您目前似乎返回的JSON作为字符串 - 与额外的引号例如“[{” ID “:1}]”。这是因为你正在序列化它而不是将它留给Json()方法。

使用

Return Json(rows, JsonRequestBehavior.AllowGet) 

,而不是

Return serializer.Serialize(rows) 
尝试