Мне нужно сохранить массив строки в 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)
}