Я думаю, что проблема здесь в том, что браузер отображает содержимое текстовой области, а не в ASP.NET как таковом. Делаем это:
public void btnSubmitClick(object sender, EventArgs e) {
this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}
позволит вам достичь желаемого вывода на экран, но вы добавите дополнительную новую строку в текст, который пользователь не вводил.
Идеальным решением было бы для элемента управления TextBox в ASP.NET всегда писать новую строку ПОСЛЕ записи открытого тега и ДО написания содержимого Text. Таким образом, вы достигнете желаемого эффекта, не ограничивая содержимое текстового поля.
Мы можем наследовать от TextBox и исправить это, переопределив RenderBeginTag:
public override void RenderBeginTag(HtmlTextWriter writer) {
base.RenderBeginTag(writer);
if (this.TextMode == TextBoxMode.MultiLine) {
writer.Write("\r\n"); // or Environment.NewLine
}
}
Теперь создание нового класса для этой небольшой проблемы кажется излишним, поэтому ваш прагматичный подход вполне приемлем. Но я бы изменил его для запуска в событии PreRender страницы, которое очень поздно в жизненном цикле страницы и не будет мешать обработке отправленного текста в событии OnSubmit кнопки:
protected void Page_Load(object sender, EventArgs e) {
this.PreRender += Page_OnPreRender;
}
protected void Page_OnPreRender(object sender, EventArgs e) {
this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}