2015-06-25 41 views
5

我有一個通用列表,我將它作爲ViewData從我的控制器傳遞給我的.aspx視圖。 我需要獲取並用Jquery腳本迭代它。在視圖中獲取ViewData JQuery

我怎樣才能使這個腳本的作品?

問候

success: function (result) { 

var myArray = new Array(); 
var myArray = '<%: ViewData["List"] %>'; 

for (var i = 0; i < myArray.length; i++) { 
alert(i); 
} 
+2

什麼是在您的ViewData [「列表」] –

+1

可能重複的[jQuery:如何遍歷/迭代對象列表](http://stackoverflow.com/questions/30730055/jquery-how-to-遍歷遍歷對象列表) –

+0

不要忘記upvote或作爲答案,如果它爲你工作... –

回答

1

嘗試這樣,推列表視圖的項目的JavaScript陣列,在腳本標記放在下面的代碼

--script tag-- 
var jList = new Array(); 
@foreach (var item in ViewData["List"] as List<String>) 
    { 
     @:jList.push('@item'); // That will work if its a one letter string but It doesnt know that its a string untill you use '' 
} 
--script tag-- 
+1

我想你可以更清楚的是,是否必須寫在腳本或在html部分。對於這個答案,你可能會得到「列表不存在於當前上下文中」的錯誤,因爲我懷疑在foreach內檢測到變量列表 – Vivekh

+0

@Vivekh - 可能你是正確的我學習mvc並得到像這樣的語法 –

+0

好吧,但如果你寫這個var jList = new Array();在Html標記它將打印,因此它應該把它放在代碼塊或@ – Vivekh

1

你可以做這樣的事情..

<script type="text/javascript"> 
@{ List<string> ss = (List<string>)ViewData["List"];} 
    var myArray = [ 
    @for (int i = 0; i < ss.Count; i++) 
    { 
     @: @(ss[i]), 
    } 
    ] 
</script> 

我的語法爲剃刀視圖(你可以做fo [R經典)

+0

我想你可能必須寫@:'@(ss [i])',而不是@:@(ss [i]),以字符串數組的形式獲得它 – Vivekh

+0

之前嘗試過但我得到語法錯誤作爲意外的標記@ – ArDevTeam

0

服務器端

public class users 
     {   
      public string name{ get; set; } 
     } 

     // in your controller code 
     ViewData["list"] = new List<users>(new users[] { new users() 
          { name="prasad"}, new users() {name="raja"}}); 

客戶端

<script type="text/javascript"> 
$(function(){ 
    var myitems=JSON.parse('@Html.Raw(Json.Encode(this.ViewData["list"]))'); 

    $.each(myitems, function(index, item) { 
     var name = item.name; 
    }); 
}); 
</script> 

我希望這可以幫助你

+0

它給了我這個錯誤:未捕獲的SyntaxError:意外的標記@ 0:1 – ArDevTeam

2

好吧,如果你使用的只是一個字符串列表,然後

這會做

$(document).ready(function() { 
@{List<string> listFromController = (List<string>)ViewData["List"];} 
    var myArray = [ 
    @for (int i = 0; i < listFromController.Count; i++) 
    { 
     @: '@(listFromController[i])', 
    } 
    ] 
}); 

但如果你是通過列表中的另一類型的,而不是字符串像一個學生員工或用戶,您將需要以下

Please use the appropriate class that you have passed and the properties suppose "UserName" could be "FirstName" "EmpId" or what ever

$(document).ready(function() { 

     @{ var listFromController = (List<KnockoutJSWebApi.Models.LoginViewModel>)ViewData["list"];} 
     var totalArray = []; 
      @for (int i = 0; i < listFromController.Count; i++) 
      { 

       <text> 
     var thisArray= { 
      'username': '@(listFromController[i].UserName)', 
      'password': '@(listFromController[i].Password)' 
     }; 
     totalArray.push(thisArray); 
      </text> 
      } 
}); 

.aspx的視圖引擎語法:

<script> 
     $(document).ready(function() { 
      <% List<string> listFromController = (List<string>)ViewData["List"]; %> 
      var myArray = [ 
      <% for (int i = 0; i < listFromController.Count; i++){ %> 

       '<%: listFromController[i] %>', 
       <% } %> 
      ] 
      debugger; 
}); 
</script> 
+0

爲什麼我總是在「@」上收到錯誤的無效標記? – ArDevTeam

+0

你能告訴我們什麼錯誤? – Vivekh

+0

無效字符@Vivekh – ArDevTeam

1

問題解決了。 我在控制器使用JsonResult方法並返回所需的值:

Json(List, JsonRequestBehavior.AllowGet); 

就這樣,我不需要,因爲我將它們分配爲數據源到我的DropDownList控件遍歷值。

$("#Generic_FK").data("DropDownList").dataSource.data(result); 

希望能幫助有同樣問題的其他人!

+0

你使用的是Telerik – Vivekh

+0

@Vivekh究竟是 – ArDevTeam

+1

那麼你錯過了你的問題中的幾個標籤。你需要更清楚。你應該已經標記了aspx視圖引擎和telerik – Vivekh