在HiddenField asp.net中存储字符串数组

use*_*482 15 asp.net hidden-field

我需要使用asp.net在我的webform中的HiddenField中存储一个字符串数组.请问有谁可以告诉我如何实现这一目标?谢谢

Mik*_*sen 15

可能有一些方法可行.

1)在JSON中序列化String []

这在使用JavaScriptSerializer该类的.NET中相当容易,并且避免了分隔符字符的问题.就像是:

String[] myValues = new String[] { "Red", "Blue", "Green" };
string json = new JavaScriptSerializer().Serialize(myValues);
Run Code Online (Sandbox Code Playgroud)

2)想出一个从未出现在字符串中的分隔符

用字符分隔每个字符串,例如|||字符串中永远不会出现的字符.您可以使用它String.Join()来构建此字符串.就像是:

String[] myValues = new String[] { "Red", "Blue", "Green" };
string str = String.Join("|||", myValues);
Run Code Online (Sandbox Code Playgroud)

然后重建它像:

myValues = str.Split(new string[] { "|||" }, StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

如果您可以信任您的输入,这可能是最佳选择,例如一系列预定义的选择.否则,您可能想要检查输入字符串,以确保它们不包含此分隔符,如果您想要非常安全.您可能HttpUtility.HtmlEncode()首先使用它来转义每个字符串.

  • 如果你展示如何将值存储在隐藏字段中,我认为答案会更好.另外,作为我,我想每个看这个答案的人都希望看到相反的方式:`new JavaScriptSerializer().反序列化<List <string >>(str)`.无论如何,谢谢:) ...`JavaScriptSerializer`解决了我的问题+1 (2认同)

cod*_*biz 7

存储数组

string[] myarray = new string[] {"1","2"};

myHiddenField.Value = String.Join(",", myarray);
Run Code Online (Sandbox Code Playgroud)

获得阵列

string[] myarray = myHiddenField.Value.Split(',');
Run Code Online (Sandbox Code Playgroud)

  • 如果`myarray`中的元素实际上*包含*逗号,那么这当然是有问题的. (3认同)

Dav*_*vid 5

你真的想把它存放在一个字段中吗?

如果将每个值放入其自己的隐藏字段中,并将所有隐藏字段赋予属性名称,则模型绑定会将其视为数组.

foreach (var option in Model.LookOptions)
{
    @Html.Hidden(Html.NameFor(model => model.LookOptions).ToString(), option)
}
Run Code Online (Sandbox Code Playgroud)