我在Textbox
控件页面添加了.ascx
,如下所示:
<asp:TextBox id="txtDescription" runat="server" Width="500" TextMode="MultiLine" Rows="2"></asp:TextBox>
首次加载时会显示类似的东西(包括开头的4个空格):
Description goes here
简单地说,它是Multiline Textbox
,有2行。但是,无论何时我们对服务器执行Postback
,当页面重新加载时,我们都会得到:
Description goes here
另一个Postback
。
Description goes here
等等。基本上,每次在Postback
之后刷新页面时,它会在文本框的开头添加4个空格。在某些页面上,这不是问题,但是,如果用户在Gridview
或其他Control
中输入了大量数据,则Textbox
的内容可能会结束向右分流20个左右的字符,有时超出Textbox
的范围。
简单地说,这对我们公司来说是一个问题,因为它发生在我们所有的网页上。我们的一位客户多次通过“......你能否在某些时候对文本框开头的空格做些什么?”
现在,我们使用的临时修复程序是PageLoad
函数中的以下代码,但是,Textbox
的开头仍有4个空格。在100 .ascx
和.aspx
个控件/页面中滚动它并不是一个真正的解决方案。
if (IsPostBack)
txtDescription.Text = txtDescription.Text;
现在最大的问题是,有没有人知道如何删除这些神秘的4个空格,这些空间一直被添加到Multiline Textbox
的开头?
答案 0 :(得分:4)
典型的html textarea(多行文本框)如下所示:
<textarea>This is some content</textarea>
现在,如果您的输出如下:
<textarea>
This is some content
</textarea>
然后你将介绍你的空间问题。 保存此内容后,您将在开头获得4个空格(缩进)。现在你重新加载这4个空格,突然你有8个空格:标记为4,保存内容为4。每次保存内容时,此模式都会继续。
我不熟悉您(ASP Web窗体)如何生成您的内容,但这应该给您一个调查点。
答案 1 :(得分:1)
我也遇到了这个问题。可能是mono asp.net bug。
这是我找到的方式, 构建自定义服务器控件以替换多行文本框。
使用asp.net集成验证框架。
有人有更好的主意吗?
[ValidationProperty("Text")]
[ControlValueProperty("Text")]
[DefaultProperty("Text")]
public class TextArea: WebControl, IPostBackDataHandler, IEditableTextControl
{
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Textarea; }
}
public bool CausesValidation
{
get
{
if (ViewState["CausesValidation"] == null)
return false;
return (bool)ViewState["CausesValidation"];
}
set
{
ViewState["CausesValidation"] = value;
}
}
public string ValidationGroup
{
get
{
return (string)ViewState["ValidationGroup"] ?? "";
}
set
{
ViewState["ValidationGroup"] = value;
}
}
public string Text
{
get
{
return (string)ViewState["Text"] ?? "";
}
set
{
ViewState["Text"] = value;
}
}
public bool ReadOnly
{
get
{
if (ViewState["Readonly"] == null)
return false;
return (bool)ViewState["Readonly"];
}
set
{
ViewState["Readonly"] = value;
}
}
public int Rows
{
get
{
if (ViewState["Rows"] == null)
return 0;
return (int)ViewState["Rows"];
}
set
{
ViewState["Rows"] = value;
}
}
public int Columns
{
get
{
if (ViewState["Columns"] == null)
return 0;
return (int)ViewState["Columns"];
}
set
{
ViewState["Columns"] = value;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
if (Enabled && !IsEnabled)
writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
if (ReadOnly)
writer.AddAttribute(HtmlTextWriterAttribute.ReadOnly, "readonly");
if (Rows != 0)
writer.AddAttribute(HtmlTextWriterAttribute.Rows, Rows.ToString(NumberFormatInfo.InvariantInfo));
if (Columns != 0)
writer.AddAttribute(HtmlTextWriterAttribute.Cols, Columns.ToString(NumberFormatInfo.InvariantInfo));
base.AddAttributesToRender(writer);
}
public override void RenderControl(HtmlTextWriter writer)
{
RenderBeginTag(writer);
writer.WriteEncodedText(Text);
RenderEndTag(writer);
}
public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
var strPostBack = postCollection[postDataKey];
if (ReadOnly || Text.Equals(strPostBack, StringComparison.Ordinal))
return false;
Text = strPostBack;
return true;
}
public void RaisePostDataChangedEvent()
{
if (!Page.IsPostBackEventControlRegistered)
{
Page.AutoPostBackControl = this;
if (CausesValidation)
Page.Validate(ValidationGroup);
}
TextChanged(this, EventArgs.Empty);
}
public event EventHandler TextChanged = delegate { };
}
答案 2 :(得分:-1)
您唯一的选择是断开代码并查看它们的显示位置。