【问题标题】:Asp.Net textbox, how to wrap splitting word instead of moving to the next lineAsp.Net文本框,如何换行而不是移动到下一行
【发布时间】:2011-05-19 18:49:14
【问题描述】:

我在 Visual Studio 2010 上使用 Asp.Net 和 VB

嗨,我正在使用 System.Web.UI.WebControls.TextBox 并将 wrap 属性设置为 "true",我的问题是当它换行时,它将整个单词移动到下一行,我想要完成的是让文本框换行,但不移动整个单词,当文本到达文本框右侧时移动到新行。

例如,想象一个 10 个字符宽的文本框。

会发生这样的事情:

0123456789  
i am a  
textbox 

这是我需要的:

0123456789  
i am a tex  
tbox

但如果我将换行设置为 false,它只会继续扩大同一行上文本框的宽度。

我正在考虑将换行设置为 false,并使用 onTextChanged 事件检查文本的长度并手动触发新行。有没有更简单的方法来完成这个?

非常感谢!

【问题讨论】:

  • 不可能。 ASP.NET 文本框控件只是标准 HTML textarea 标记的包装器,它不提供您需要的那种显式格式。建议在使用固定线宽和硬换行符 (\n) 将输出发送到控件之前格式化输出

标签: asp.net vb.net visual-studio-2010 textbox word-wrap


【解决方案1】:

这是一个 Web 浏览器实现问题,而不是可以使用 ASP.NET 完成的问题。

理论上,控制它的唯一方法是在客户端运行 JavaScript,但这条路线需要一些英雄主义。你需要

  1. 让 JS 计算输入文本的长度
  2. 让 JS 使用某种行分隔符(即“i am a tex<LINEBREAK>tbox”)将文本的原始值保留在隐藏的 INPUT 字段中,这样您就可以通过 JS 的换行符从用户那里辨别出真正的换行符插入以切断行尾
  3. 提交表单时,不要使用实际文本框中的内容,而是使用隐藏的 INPUT 字段中的内容,并将 <LINEBREAK>s 替换为空字符串。

但是以上所有这些都需要大量的工作,在各种浏览器上进行大量测试,并且破坏了一些内置的 ASP.NET 东西(即,不使用文本框的内容,而是使用客户端侧输入)。

【讨论】:

  • 所以我想这不值得付出努力...感谢您的建议!
【解决方案2】:

  替换所有空格,它将按照您的问题要求换行。

但是,如果用户在文本区域中键入任何实际空格,则该行为会失败。

我没有在回发时测试返回值。 您需要测试包含和不包含编辑的回发结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多