在Razor视图中将项添加到字符串数组

时间:2015-10-14 13:31:03

标签: c# arrays asp.net-mvc asp.net-mvc-4 razor

我有一个剃刀视图,我在这里声明一个字符串数组

@{
  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

1 个答案:

答案 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。