2015-10-14 70 views
-1

我有一個Razor視圖我在哪裏聲明一個字符串數組添加物品到字符串數組在Razor視圖

@{ 
    var siteList = new List<string>(); 
    var stockTypeList = new List<string>(); 
} 

有是在選定的值進行迭代,並且我要添加值上多選事件的每個選定項目對這個陣列

$('#stockTypeArea select :selected').each(function (i, selected) { 
    @stockTypeList.Add(selected.val()); 
}); 

目前,這抱怨說,它不能解決'選定'的價值。所以我的問題是如何將這些字符串值添加到我的字符串數組?

的原因,我需要的字符串數組的是,我張貼此回爲一個@ Html.Action的一部分

@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList }))) 

也許有更好的方式來捕捉字符串列表,然後回傳給控制器。

即使我試着和測試方法添加到我的字符串數組:

@stockTypeList.Add("Test"); 

我得到一個錯誤:

Expression must return a value to render 

回答

3

剃刀代碼運行服務器端。

jQuery正在運行客戶端,您的事件處理程序也是如此。

此:

$('#stockTypeArea select :selected').each(function (i, selected) { 
    @stockTypeList.Add(selected.val()); 
}); 

是兩者的混合,但永遠不能正常工作。 selected.val()是客戶端,@stockTypeList.Add(...)是服務器端。

所有這些解釋了您的第一條錯誤消息。


@stockTypeList.Add("Test");也是一個Razor(服務器端)語句。它將一個字符串添加到您的列表中,但該方法不返回值(public void Add(T item))@ Razor運算符采用以下表達式並將其作爲URL編碼字符串寫入客戶端文檔,但您並未提供合法的。值(void

這說明你的第二個錯誤


@HTML.Action(...)產生一個網址,可以包括查詢字符串參數的鏈接,這些通常是在您的通話將第三個參數來:

@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList }))) 

但是當你執行這段代碼(服務器端)時,列表當然是空的。

您需要在客戶端代碼(例如JavaScript數組)中收集字符串,並使用這些字符串構造一個導航URL。