2012-06-22 72 views
4

我目前正試圖找出KendoUI。我正在使用版本2012.1.322。無法將簡單的字符串列表綁定到ListView

我有一個簡單的字符串數組List<string>通過AJAX調用返回給web方法中的用戶。

["name","phone","address","zip"]

當ListView控件綁定列表是空的,我只得到

<ul id="fileAlist" data-role="listview" class="k-widget k-listview"></ul>

我很確定它與我的模板出錯有關。我有什麼要設置的,而不是${Object}讓它呈現,如:

<ul id="fileAlist" data-role="listview" class="k-widget k-listview"> 
    <li>name</li> 
    <li>phone</li> 
    <li>address</li> 
    <li>zip</li> 
</ul> 

下面是當前的代碼:

$(document).ready(function() { 
    $("#fileAlist").kendoListView({ 
     template: "<li>${Object}</li>", 
     dataSource: 
      new kendo.data.DataSource({ 
       transport: { 
        read: { 
         url: '@Url.Action("GetColumnNames", new {File="A"})', 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8" 
        } 
       } 
      }) 
    }); 
}); 

C#代碼(在-如果你有興趣)

[HttpGet] 
    public JsonResult GetColumnNames(string file) 
    { 
     if (file == "A") 
     { 
      var columns = new List<string>() 
           { 
            "name", 
            "phone", 
            "address", 
            "zip" 
           }; 
     } 

     return new JsonResult { Data = columns, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
    } 

其他一些試驗和失敗 下面是我嘗試的一些模板創意以及返回的結果。顯然,他們都沒有給我我想要的字符串輸出。

  • 我試圖改變模板是template: "<li>${}</li>"和渲染,當我得到<li>undefined</li>
  • 我試圖改變tempalte是template: "<li>$.val()</li>"和渲染,當我得到<li>$.val()</li>
  • 我試圖改變tempalte是template: "<li>${}.selector</li>"當呈現我得到<li>undefined.selector</li>

回答

2

你的代碼有幾個配置問題。我已經簡化了代碼,專注於一個工作示例。

模型類:

public class Contact 
{ 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
    public string Phone { get; set; } 
    public string Address { get; set; } 
    public string Zip { get; set; } 
} 

查看標記,你需要用列表佈局發揮,以獲得所需的外觀:

<ul> 
    <div id="contactList" style="width: 400px;"></div> 
</ul> 

注意如何模板標記了模樣:

<script id="template" type="text/x-kendo-tmpl"> 
    <li>${ Name} ${ Phone } ${ Address } ${ Zip }</li> 
</script> 

<script type="text/javascript" > 
    $(document).ready(function() { 
     var datasource = new kendo.data.DataSource({ 
      transport: { 
         read: { 
          url: "@(Url.Action("GetContacts", "Home"))", 
          dataType: "json", //switched to json instead of jsonp for this example 
          contentType: "application/json; charset=utf-8", 
          type: "GET" 
         } 
      } 
     }); 

     $("#contactList").kendoListView({ 
      dataSource: datasource, 
      template: kendo.template($("#template").html()) //Link the template to the list view control 
     }); 
    }); 

控制器返回JSON:

public ActionResult GetContacts() 
{ 
    List<Contact> list = new List<Contact>(); 
    Contact contact = new Contact() { ContactId = 0, Name = "Steve", Address = "Some Street", Phone = "1-345-345-3455", Zip = "334566" }; 
    list.Add(contact); 
    contact = new Contact() { ContactId = 1, Name = "Jim", Address = "Another Street", Phone = "1-777-987-3889", Zip = "998754" }; 
    list.Add(contact); 

    return Json(list, JsonRequestBehavior.AllowGet); 
} 

- 編輯 -

下面是會返回一個JSON字符串沒有具體Contact對象的控制器。

public ActionResult GetContacts() 
{ 
    var columns = new List<Dictionary<string, object>>() { 
     new Dictionary<string,object>(){ {"Name", "Rex"}, {"Phone", "1-123-123-2342"}, {"Address", "Westwood Drive"}, {"Zip", 928347}}, 
     new Dictionary<string,object>(){ {"Name", "Smith"}, {"Phone", "1-333-444-5555"}, {"Address", "Allen Way"}, {"Zip", 23456}} 
    }; 

    return Json(columns, JsonRequestBehavior.AllowGet); 
} 
+1

我明白你的例子,我能得到它,如果我使用一個對象,如聯繫你的榜樣'名單名單=新名單()工作;'我要問的是如何讓它與一個字符串'List ()list = new List ();' – Mark

+1

@lgorrious我已經包括我的控制器方法,返回字符串列表,希望幫助。我確實改變了它以返回'json',因爲它本來應該是第一位的。我改變了它在kendo網站上的一個例子,並忘記在發佈之前將它改回來。 – Mark

+0

@Mark這確實有幫助,看看我修改後的答案。您只有一個字符串列表才能返回有效的json鍵+值對字符串。所以我添加了另外一本字典集合以避免必須擁有一個具體的類。 – Igorrious

相關問題