Сохранение массива строк в HiddenField asp.net

Мне нужно сохранить массив строки в HiddenField в моей веб-форме с помощью asp.net. Кто-нибудь, пожалуйста, скажите мне, как я могу это достичь? Благодаря

Ответ 1

Возможно, будет работать несколько методов.

1) Сериализуйте строку [] в JSON

Это было бы довольно легко в .NET с использованием класса JavaScriptSerializer и избежать проблем с символами-разделителями. Что-то вроде:

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

2) Придумайте разделитель, который никогда не появляется в строках

Разделите каждую строку символом типа |||, который никогда не появится в строке. Вы можете использовать String.Join() для создания этой строки. Что-то вроде:

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

И затем перестройте его так:

myValues = str.Split(new string[] { "|||" }, StringSplitOptions.RemoveEmptyEntries);

Это может быть лучшим вариантом, если вы можете доверять своим вводам, например, серии номеров заранее определенных вариантов. В противном случае вы, вероятно, захотите проверить свои строки ввода, чтобы убедиться, что они не содержат этот разделитель, если вы хотите быть очень безопасным. Вы могли бы использовать HttpUtility.HtmlEncode(), чтобы сначала вывести каждую строку.

Ответ 2

Чтобы сохранить массив

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

myHiddenField.Value = String.Join(",", myarray);

Чтобы получить массив

string[] myarray = myHiddenField.Value.Split(',');

Ответ 3

Вы действительно хотите сохранить его в одном поле?

Если вы поместите каждое значение в свое собственное скрытое поле и дадите всем скрытым полям имя вашего свойства, тогда привязка модели будет рассматривать это как массив.

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