2012-06-12 78 views
2

我在我的HTML代碼的下面一行:如何訪問模式陣列中的jQuery函數

<input type="hidden" value="@Model.BgtArray" id="BudgetArray"/> 

這裏,BgtArray是一個2-d陣列獲取的觀點本身填充。事情是這樣的:

@for(i=0;i<10;i++) 
{@for (j=0;j<10;j++) 
    @Model.BgtArray[i][j]= *some value*; 
} 

如何訪問數組的元素在一個jQuery功能?

回答

3

您正在視圖內填充模型? MVC模式視圖旨在顯示以模型形式傳遞給它們的數據。控制者有責任填充這個模型。

這是說讓我們假設你有一個模型:

public class MyViewModel 
{ 
    public int[][] BgtArray { get; set; } 
} 

其中填充控制器動作中,並傳遞給視圖:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      BgtArray = Enumerable 
       .Range(1, 10) 
       .Select(
        i => Enumerable 
          .Range(1, 10) 
          .Select(j => i * j) 
          .ToArray() 
       ) 
       .ToArray() 
     }; 
     return View(model); 
    } 
} 

,然後我們可以有強烈的相應鍵入的視圖中,我們可以JSON序列化模型並在javascript中訪問它:

@model MyViewModel 
<script type="text/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
    alert(model.BgtArray[1][2]); 
</script> 

將在瀏覽器中呈現這樣的:

<script type="text/javascript"> 
    var model = {"BgtArray":[[1,2,3],[2,4,6],[3,6,9]]}; 
    alert(model.BgtArray[1][2]); 
</script> 

至於下面的行而言:

<input type="hidden" value="@Model.BgtArray" id="BudgetArray"/> 

因爲你不可能整個複雜的對象圖存儲到一個隱藏字段它是相當無用。渲染結果將是:

<input type="hidden" value="System.Int32[][]" id="BudgetArray"/> 

這是不太可能是你想要實現的。

+0

嘿達林。非常感謝您的回覆。然而,即時通訊運行您的代碼時出現以下錯誤:在序列化類型爲「System.Reflection.RuntimeModule」的對象時檢測到循環引用。它發生在這一行:var model = @ Html.Raw(Json.Encode(Model)); – PabloB

+0

這是因爲你有循環引用。您不能使用循環引用序列化對象圖。我建議你使用視圖模型,而不是將你的領域模型傳遞給視圖,並打破這個循環引用。 –

1

爲了解決循環引用的問題(在回答下面的意見對原來的問題提到的),我用這個代替Json.Encode

@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)) 

在你的類,使用下面的註釋,以使JSON忽略引起麻煩的導航屬性:取自

[JsonIgnore] 
public virtual Item Item { get; set; } 

解決方案:Hide field in model when using @Json.Encode