Текстовое поле ASP MVC в виде массива или списка?

#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. Не знал об этой комбинации, я добавлю это к своему ответу 😉