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

C# 在Razor视图中将项添加到字符串数组,c#,arrays,asp.net-mvc,asp.net-mvc-4,razor,C#,Arrays,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个razor视图,其中声明了一个字符串数组 @{ var siteList = new List<string>(); var stockTypeList = new List<string>(); } 目前,它抱怨无法解析“选定”值。所以我的问题是如何将这些字符串值添加到字符串数组中 我需要字符串数组的原因是我将其作为@Html.Action的一部分发回 @HTML.Action("CustomReport_Data", "Reports", new {

我有一个razor视图,其中声明了一个字符串数组

@{
  var siteList = new List<string>();
  var stockTypeList = new List<string>();
}
目前,它抱怨无法解析“选定”值。所以我的问题是如何将这些字符串值添加到字符串数组中

我需要字符串数组的原因是我将其作为@Html.Action的一部分发回

@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList })))
也许有更好的方法来捕获这个字符串列表并传递回控制器

即使我尝试使用以下方法将add方法添加到字符串数组中并进行测试:

@stockTypeList.Add("Test");
我得到一个错误:

Expression must return a value to render

Razor代码正在服务器端运行

jQuery正在运行客户端,事件处理程序也在运行

这:

两者兼而有之,但这是行不通的
selected.val()
是客户端,
@stockTypeList.Add(…)
是服务器端

所有这些都解释了您的第一条错误消息


@stockTypeList.Add(“测试”)
也是Razor(服务器端)语句。它会向列表中添加一个字符串,但该方法不会返回值。(
@
Razor运算符采用以下表达式并将其作为URL编码的字符串写入客户端文档,但您没有为其提供合法值(
void

这就解释了你的第二个错误


@HTML.Action(…)
生成一个包含查询字符串参数的url链接。这些参数通常来自调用中的第三个参数:

@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList })))
但是在执行此代码时(服务器端),列表当然是空的

您需要在客户端代码(例如JavaScript数组)中收集字符串,并使用这些字符串构造用于导航的URL

$('#stockTypeArea select :selected').each(function (i, selected) {
  @stockTypeList.Add(selected.val());
});
@HTML.Action("CustomReport_Data", "Reports", new { stockCodesList = stockTypeList })))