首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将HtmlTextWriter解决方案添加为WebControl

将HtmlTextWriter解决方案添加为WebControl
EN

Stack Overflow用户
提问于 2011-09-07 08:40:31
回答 1查看 2.6K关注 0票数 0

我有一个可行的解决方案,但它不能满足客户的QA要求。问题是我无法控制WebControls的位置,它们需要相对于高于这些的图表。根据我的看法,我需要将sb.ToString()“编译”到一个WebControl中,然后我将能够将它编译成Controls.Add()。

我需要从这个工作解决方案出发:

私有void SetTextBoxes()

{

TextBox myBox =新TextBox();

System.Web.UI.WebControls.Label myLabel =新System.Web.UI.WebControls.Label();

// for (int I= 0;i< _module.Values.Count;i++) { myLabel =新System.Web.UI.WebControls.Label();myLabel.Text = _module.Valuesi.Text.ToString() +:";myBox =新TextBox();myBox.BorderStyle = BorderStyle.None;myBox.ReadOnly = true;myBox.Text = _module.Valuesi.Value.ToString("n0");myBox.Columns = myBox.Text.Length;// Controls.Add(myLabel);Controls.Add(myBox);// }/ }

关键是Controls.Add(),因为它绑定到一个模块化系统中,覆盖这些代码和其他几个WebControls。

我对解决方案可能是什么样子有一个建议。

代码语言:javascript
复制
private string WriteHtml()
{
    StringBuilder sb = new StringBuilder();
    using (StringWriter stringWriter = new StringWriter(sb))
    {
        using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter))
        {
            htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Table);
            htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Tr);

            for (int i = 0; i < _module.Values.Count; i++)
            {
                htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Td);

                htmlTextWriter.Write(string.Format("{0}: {1:n0}"
                    , _module.Values[i].Text
                    , _module.Values[i].Value));

                htmlTextWriter.RenderEndTag(); // td
            }
            htmlTextWriter.RenderEndTag(); // tr
            htmlTextWriter.RenderEndTag(); // table
        }
    }

    //Controls.Add(sb.ToString());
    return sb.ToString();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-07 09:12:37

我几乎解决了同样的任务。以下是我的研究结果:

1)我创建了小助手方法:

代码语言:javascript
复制
   public static void RenderControl(Control control, HtmlTextWriter response)
        {
            var sWriter = new StringWriter();
            var htmlWriter = new HtmlTextWriter(sWriter);

            control.RenderControl(htmlWriter);

            // Write HTML
            response.WriteLine(sWriter);
            response.Flush();
        }

2)在主代码中,如果您希望得到呈现的Html,则需要执行以下操作:

代码语言:javascript
复制
    StringBuilder sb = new StringBuilder();
    using (StringWriter stringWriter = new StringWriter(sb))
    {
        using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter))
        {
          Control control= new YourControlWithTextBox();
          WebControlHelper.RenderControl(control, htmlTextWriter);
          return stringWriter.ToString();
        }
    }

有了这个实现,您可以将SetTextBoxes()保持原样。你可以得到两个版本的相同的控件。这里有两个巨大的好处:(A)代码仍然是可读的,并且是用asp.net描述的。(B)在任何需要解决简单任务的地方,都可以使用WebControlHelper.RenderControl

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7331020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档