我有一个剃刀视图,我在这里声明一个字符串数组
@{
var siteList = new List<string>();
var stockTypeList = new List<string>();
}
多选中有一个事件迭代选定的值,我想将每个选定项的值添加到此数组
$('#stockTypeArea select :selected').each(function (i, selected) {
@stockTypeList.Add(selected.val());
});
目前,我们抱怨它无法解析所选择的&#39;值。所以我的问题是如何将这些字符串值添加到我的字符串数组?
我需要字符串数组的原因是我将其作为@Html.Action
的一部分发回@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList })))
也许有更好的方法来捕获这个字符串列表并传回控制器。
即使我尝试使用以下方法测试add方法到我的字符串数组:
@stockTypeList.Add("Test");
我收到错误:
Expression must return a value to render
答案 0 :(得分:3)
Razor代码正在服务器端运行。
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。