2015-01-21 73 views
0

我想解析JSON結果到MVC中的DropDownList,但到目前爲止我的努力已經沒有結果。解析JSON到DropDownList

我有以下代碼:

public static SelectList getRoles(string sessionKey) 
{ 
    string URL = ConfigurationManager.AppSettings["JsonURL"].ToString(); 
    string appName = ConfigurationManager.AppSettings["appName"].ToString(); 
    string result = ""; 

    var httpWebRequest = (HttpWebRequest)WebRequest.Create(URL + "rest/" + appName + "/Role?fields=id%2Cname"); 
    httpWebRequest.ContentType = "text/json"; 
    httpWebRequest.Method = "GET"; 

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     result = streamReader.ReadToEnd();   
    } 
    var roles = JsonConvert.DeserializeObject<RootObject>(result); 
} 

我已經創建的類反序列化,但我對如何將這些數據傳遞作爲一個DropDownList到MVC視圖不知道。

回答

1

這是通常將如何做到這一點:

DropDownListFor HTML幫助,可同時接收到顯示的IEnumerable<T>SelectList作爲收藏。

我們假設您的視圖模型的類型爲TViewModel。並TViewModel有一個屬性,你想填寫下拉列表的選項之一。示例:您的ViewModel的類型爲Person,它的屬性爲Gender,您想填寫其中一個性別選項。

你可以有這樣一種觀點:

@model MvcApplication1.ViewModels.Contact 

@Html.DropDownListFor(m => m.Gender, Model.GenderOptions) 

在上面的例子中,Model.Gender將要接收的Model.GenderOptions之一,因爲用戶選擇一個。

Model.GenderOptions應該是SelectListIEnumerable<T>,其中T可以是任何東西,或者簡單地是SelectListItem

你可以找到更多的信息here

0

經過進一步測試,我找到了正確的答案。型號:

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     List<JToken> results = new List<JToken>(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      result = streamReader.ReadToEnd(); 
      results = JObject.Parse(result).SelectToken("record").ToList(); 
     } 
     List<Role> roles = new List<Role>(); 
     foreach(JObject token in results) 
     { 
      Role role = new Role(); 
      role.Id = Int32.Parse(token["id"].ToString()); 
      role.RoleName = token.SelectToken("name").ToString(); 
      roles.Add(role); 
     } 

     return roles; 

查看:

@{List<Backend.Models.Role> roles = new Backend.Models.CreateUserModel().Load();} 

@foreach (var role in roles) 
           { 
            <option value="@role.Id">@role.RoleName</option> 
           }