动态添加控件时代码的最佳程度

本文关键字:最佳 程度 代码 时代 添加 控件 动态 | 更新日期: 2023-09-27 18:21:32

在我正在设计的网站中,我需要显示我使用 asp:FileUpload 控件上传的图像。因此,上传后,我使用字符串生成器添加div,img和textarea,然后将其加载到我已经创建的面板中。那么使用Stringbuilder加载内部HTML更好,还是使用HtmlgenericControls添加图像和文本区域等控件更好。我正在使用 C#。我目前的编码方式如下:

前端:

<form id="form1" runat="server">
<div class="transbox" id="mainbk" runat="server" style="position:absolute; top:0px; left:0px; width: 100%; height: 100%;" >
  <asp:FileUpload runat="server" ID="UploadImages" style="background-color:white; position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 350px; right: 251px;" Width="500px" AllowMultiple="true"/>
    <asp:Button runat="server" ID="uploadedFile" style="position:absolute;  font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 870px; width: 112px; height: 29px;" Text="Upload" OnClick="uploadFile_Click" />
    <asp:Panel ID="updtpanel" runat="server" CssClass="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute" Visible="false">
    </asp:Panel>
 </div>

</form>

后端如下:

protected void uploadFile_Click(object sender, EventArgs e)
{
    if (UploadImages.HasFiles)
    {
       int tid = 0;
       string fileExt = Path.GetExtension(UploadImages.FileName).ToLower();
       if (fileExt == ".jpeg" || fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp")
       {
           HtmlGenericControl d = new HtmlGenericControl("div");
           Button btnsave = new Button();
           btnsave.Text = "Save";

           sb.Append("<div class=" + "'"savback'"" + ">");
           sb.Append("<div class=" + "'"head'"" + ">Write Description</div>");
           foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
           {
               id += 1;
               tid = tid + 1;
               string textid = "txt" + tid;
               filepath = Server.MapPath("~/Images/Gallery/" + uploadedFile.FileName);
               uploadedFile.SaveAs(filepath);
               newpath = "../Images/Gallery/" + uploadedFile.FileName;
               try
               {
                   updtpanel.Visible = true;
                   sb.Append("<div class=" + "'"dataload'"" + ">");
                   sb.Append("<img class=" + "'"loadimg'"" + "src=" + "'"" + newpath.ToString() + "'"" + " />");
                   sb.Append("<textarea  class=" + "'"txtdes'"" + "id=" + "'"" + textid + "'"" + "></textarea>");
                   sb.Append("</div>");

               }
               catch (Exception ex)
               {
                   Response.Write(ex.Message);
               }
           }
           sb.Append("</div>");
           d.InnerHtml = sb.ToString();
           updtpanel.Controls.Add(d);
           updtpanel.Controls.Add(btnsave);
       }
       else
       {
           Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select only Image Files!!');", true);
       }
    }
    else
    {
        Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select a File First!!');", true);        
    }
}

请让我知道哪种是创建动态控件的好方法?

动态添加控件时代码的最佳程度

最佳代码:

  • 不包含超过 50 行难以阅读的代码(同意,它不是不可读的,但仍然,小的重构会有所帮助(,

  • 不会将 CSS 与 HTML 以及与演示文稿相关的 HTML 属性(如 width

  • 不使用 JavaScript alert

让我们回到你的问题。哪一个更好StringBuilder还是HtmlGenericControl

最好是一个极其模糊的术语,让我们回答一堆略有不同的问题:

  1. 哪一个更快

    可能StringBuilder,因为没关系。完全。与下载图像所花费的时间(例如两秒,即 2000 毫秒(相比,StringBuilderHtmlGenericControl之间的性能比较很可能不到一毫秒。在需要 2000 毫秒的流程上浪费 1 毫秒是否重要?

  2. 哪一个更安全

    您在以下代码中发现了多少错误?

    sb.Append("<div class='"illustration'"><span-class='"contents'">")
      .Append("<img class=" + "'"loadimg'"" + "srv=" + "'"" + newpath + "'"" + ">")
      .Append("/div></span>");
    

    我看看:

    • divspan倒置,
    • 结束div缺少"<"字符,
    • img缺少"/"(如果输出是 XHTML(,
    • src写成srv有错别字,
    • span-class应该span class
    • src(srv(之前没有空格。

    通过让.NET Framework从强类型对象生成HTML的任务,几乎每个错误都可以轻松避免。

  3. 哪一个更具可读性?

    海事组织,都不是。HTML代码可以以干净的方式编写,使其非常可读。同样,如果代码是一段废话,则很容易在所有这些对嵌入式控件的调用中丢失。

  4. 哪一个更可靠

    .NET Framework被认为是经过严格测试的,并且特别可靠,至少与一般的业务应用程序相比是这样。你对.NET Framework的了解越多越好,除非你知道如何做得更好,并且你已经测试了你的方法,提交了它进行配对审查,等等。

    StringBuilder的情况下,你几乎不能对你的代码进行单元测试。让 .NET Framework 代替您生成 HTML 意味着您可以更专注于您操作的实际对象,并且测试它们稍微容易一些。

那么,什么是最好的解决方案

就个人而言,如果我坚持使用经典 ASP.NET(与 ASP.NET MVC 相反(,我会使用 HTML 模板创建一个专用控件

如果由于某些原因这是不可能的,那么选择HtmlGenericControl:它抽象了 HTML 并让您专注于对象本身。

如果你需要编写干净、可读的HTML代码,HtmlGenericControl将是一个负担,你将不得不选择字符串连接或一些模板系统。 ASP.NET 控件以生成不太好的 HTML 代码而闻名。鉴于您问题中的 HTML 代码,此限制不适用于您的情况。