我想用一个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"
是否可以将任意一行文本放置到字符串数组中的另一个位置?
答案 0 :(得分:2)
我遇到了类似的问题,这就是我的处理方式:
var splitInput = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
这将从您的“输入”字符串创建一个数组“ splitInput”,并在换行符上进行拆分。
答案 1 :(得分:2)
input
的类型应为string
,而不是string[]
。
要转换为数组,您必须将字符串拆分为新行;
input.Split(new[] { "\r\n", "\r", "\n", "\n\r"}, StringSplitOptions.None);
NB :我不会依赖Environment.NewLine
,因为您不确定浏览器是否会使用与服务器环境相同的标准来提交换行符。
答案 2 :(得分:1)
您需要将“视图”中的值作为一个数组传递,然后可以接收它们并进行使用以将它们转换为所需的任何数据结构。
使用此代码,您可以在观察新行和空条目的同时拆分数组:
var list = input[1].Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
编辑
@phuzi在注释中建议,这可能不适用于所有操作系统。所以我抬起头,发现他是对的,所以这里有一些很好的信息。
官方MSDN说:
对于非Unix平台,包含“ \ r \ n”的字符串或字符串 在Unix平台上包含“ \ n”。
不同的操作系统具有不同的转义字符,例如\r\n
和\n
以及\n\r
和\r
所以我去点了小提琴,并尝试了这段代码来检查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
转义字符,该字符由一些流行的OS(包括一些旧的MAC OS)使用。
所以更好的解决方案应该是在不同的操作系统中使用以下代码以及所有可能的转义字符:
somestring.Split(new[] { "\r\n", "\r", "\n", "\n\r"}, StringSplitOptions.None);
这将使您摆脱奇怪的情况。
希望这会有所帮助!
要详细了解在不同的操作系统中哪些字符用作转义字符,请访问:New Line Characters