Запретить многострочному ASP: текстовому полю обрезать перевод строки

У меня есть следующая веб-форма:

<%@ Page Language = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" 
    Inherits = "TestWebApp.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml" >
<head runat = "server">
    <title></title>
</head>
<body>
    <form id = "form1" runat = "server">
    <div>
        <asp:TextBox ID = "txtMultiLine" runat = "server" 
            Width = "400px" Height = "300px" TextMode = "MultiLine"></asp:TextBox>
        <br />
        <asp:Button ID = "btnSubmit" runat = "server" 
            Text = "Do A Postback" OnClick = "btnSubmitClick" />
    </div>
    </form>
</body>
</html>

и каждый раз, когда я отправляю назад, ведущие переводы строк в текстовом поле удаляются. Есть ли способ предотвратить такое поведение?

Я думал о создании настраиваемого элемента управления, унаследованного от текстового поля, но сначала хотел проверить работоспособность.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 689
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В итоге я сделал следующее в btnSubmitClick ()

public void btnSubmitClick(object sender, EventArgs e)
{
    if (this.txtMultiLine.Text.StartsWith("\r\n"))
    {
        this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
    }
}

Я, должно быть, очень устал или болен или что-то в этом роде

Я думаю, что проблема здесь в том, как браузер отображает содержимое текстового поля, а не в 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;
}

Другие вопросы по теме