ASP MVC textarea как массив или список? - PullRequest
2 голосов
/ 01 апреля 2019

Я хочу сделать базовую форму с одним 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]. В текстовой области у меня будет несколько строк текста. У меня вопрос, как установить каждую строку текста из textarea в другое место в массиве input? Возможно ли это?

На данный момент input var выглядит так:

"One\r\nTwo\r\nThree"

Можно ли поместить любую строку текста в другое место в массиве строк?

Ответы [ 3 ]

2 голосов
/ 01 апреля 2019

input должно быть типа string, а не string[].

Чтобы преобразовать в массив, вам нужно разбить строку на новые строки;

input.Split(new[] { "\r\n", "\r", "\n", "\n\r"}, StringSplitOptions.None);

Примечание. Я бы не стал полагаться на Environment.NewLine, так как вы не можете быть уверены, что браузер будет отправлять переводы строк с использованием того же стандарта, что и среда вашего сервера.

2 голосов
/ 01 апреля 2019

Я столкнулся с подобной проблемой, вот как я с ней справился:

var splitInput = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

Это создает массив "splitInput" из вашей строки "input", разделяя его на новую строку.

1 голос
/ 01 апреля 2019

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

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

  var list = input[1].Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();

РЕДАКТИРОВАТЬ

, как @phuzi предположил в комментариях, что это может работать не во всех операционных системах.поэтому я посмотрел на это и обнаружил, что он был прав, поэтому вот некоторая хорошая информация.

официальный MSDN говорит:

Строка, содержащая "\ r \ n" для не-Unix-платформ,или строка, содержащая «\ n» для платформ Unix.

разные операционные системы имеют разные экранирующие символы, такие как \r\n и \n и \n\r и \r

поэтому я пошел в точку net fiddle и попробовал этот код, чтобы проверить, где происходит сбой Environment.NewLine.

var myString = "this  \r\n is  \r some  \n text \n\r 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[] { "\r\n", "\r", "\n", "\n\r"}, StringSplitOptions.None);

Это избавит вас от странных сценариев.

Надеюсь, это поможет!

, чтобы узнать больше о том, какие символы используются в качестве escape-символов в различных операционных системах, посетите: Символы новой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...