#html #asp.net-mvc
#HTML #asp.net-mvc
Вопрос:
я хочу создать базовую форму из одного textarea
. Я хочу передать сообщение от textarea
к контроллеру MVC.
Это мой метод в контроллере:
[HttpPost]
public ActionResult FromInput(string[] input)
{
var c = input.ToString();
return View("Succes");
}
И мой Index.cshtml
:
<div class="row">
<form id="form" action="/Home/FromInput" method="post">
<textarea name="input"> </textarea>
<br />
<input type="submit" id="submit_button" value="Submit" />
</form>
на данный момент моей input
переменной в контроллере, переданной функции, является string[1]
array. В текстовой области у меня будет несколько строк текста. Мой вопрос в том, как перенести каждую строку текста из textarea
в другое место в input
массиве? Возможно ли это?
На данный момент input
var выглядит следующим образом:
"OnernTwornThree"
Возможно ли поместить любую строку текста в другое место в массиве строк?
Ответ №1:
Я столкнулся с аналогичной проблемой, вот как я с ней справился:
var splitInput = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
Это создает массив «splitInput» из вашей строки «input», разделяющийся при переводе строки.
Комментарии:
1. Это может не всегда работать, нет гарантии, что браузер, работающий на Windows, macOS, Android, iOS, Linux или любой другой ОС, будет использовать то же соглашение для окончаний строк, что и сервер. Вместо этого перечислите распространенные возможные способы, которые можно было бы использовать.
Ответ №2:
input
должно иметь тип string
not string[]
.
Для преобразования в массив вам придется разбить строку на новые строки;
input.Split(new[] { "rn", "r", "n", "nr"}, StringSplitOptions.None);
Примечание Я бы не стал полагаться на Environment.NewLine
, поскольку вы не можете быть уверены, что браузер отправит новые строки, используя тот же стандарт, что и ваша серверная среда.
Ответ №3:
Вам нужно передать значения из вашего представления в виде одного массива, а затем вы можете получать их и играть с ними, чтобы превратить их в любую структуру данных, которую вы хотите.
используя этот код, вы можете разделить массив, сохраняя при этом в поле зрения новые строки и пустые записи:
var list = input[1].Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
Редактировать
как предположил @phuzi в комментариях, это может работать не во всех операционных системах. итак, я просмотрел это и обнаружил, что он был прав, поэтому вот некоторая полезная информация.
в официальном MSDN говорится:
Строка, содержащая «rn» для платформ, отличных от Unix, или строка, содержащая «n» для платформ Unix.
разные операционные системы имеют разные экранирующие символы, такие как rn
и n
и nr
и r
итак, я зашел в dot net fiddle и попробовал этот код, чтобы проверить, где происходит Environment.NewLine
сбой.
var myString = "this rn is r some n text nr hurray";
var list = myString.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var item in list){
Console.WriteLine(item);
}
результаты были впечатляющими, но не настолько, вот результаты:
this
is some
text
hurray
обратите внимание, что Environment.NewLine
пропущен r
escape-символ, который используется некоторыми популярными ОС, включая некоторые старые MAC OS.
таким образом, лучшим решением должно быть использование следующего кода со всеми возможными escape-символами в разных операционных системах:
somestring.Split(new[] { "rn", "r", "n", "nr"}, StringSplitOptions.None);
Это избавит вас от странных сценариев.
Надеюсь, это поможет!
чтобы узнать больше о том, какие символы используются в качестве escape-символов в разных операционных системах, посетите: Символы новой строки
Комментарии:
1. Это может не всегда работать, нет гарантии, что браузер, работающий на Windows, macOS, Android, iOS, Linux или любой другой ОС, будет использовать то же соглашение для окончаний строк, что и сервер. Вместо этого перечислите распространенные возможные способы, которые можно было бы использовать.
2. @phuzi Спасибо, что поделился этим соображением. не могли бы вы, пожалуйста, поделиться, где
r
используется в качестве escape-символа3. Традиционно Apple Mac использовали
r
в качестве окончания строки, хотя Mac OS X используетn
большинство (все?) Системы на базе Unix / Linux. Windows всегда использовалаrn
.4. @phuzi Спасибо, что поделились тем, что я посмотрел это, а также увидел, что некоторые операционные системы также используют
nr
Мне нужно обновить свой ответ, чтобы обсудить это подробно. кстати, ваше здесь самое правильное, так что 1 за это.5. Не знал об этой комбинации, я добавлю это к своему ответу 😉