动态添加控件时代码的最佳程度
本文关键字:最佳 程度 代码 时代 添加 控件 动态 | 更新日期: 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
?
最好是一个极其模糊的术语,让我们回答一堆略有不同的问题:
-
哪一个更快?
可能
StringBuilder
,因为没关系。完全。与下载图像所花费的时间(例如两秒,即 2000 毫秒(相比,StringBuilder
和HtmlGenericControl
之间的性能比较很可能不到一毫秒。在需要 2000 毫秒的流程上浪费 1 毫秒是否重要? -
哪一个更安全?
您在以下代码中发现了多少错误?
sb.Append("<div class='"illustration'"><span-class='"contents'">") .Append("<img class=" + "'"loadimg'"" + "srv=" + "'"" + newpath + "'"" + ">") .Append("/div></span>");
我看看:
-
div
和span
倒置, - 结束
div
缺少"<"字符, -
img
缺少"/"(如果输出是 XHTML(, src
写成srv
有错别字,-
span-class
应该span class
, src
(srv
(之前没有空格。
通过让.NET Framework从强类型对象生成HTML的任务,几乎每个错误都可以轻松避免。
-
-
哪一个更具可读性?
海事组织,都不是。HTML代码可以以干净的方式编写,使其非常可读。同样,如果代码是一段废话,则很容易在所有这些对嵌入式控件的调用中丢失。
-
哪一个更可靠?
.NET Framework被认为是经过严格测试的,并且特别可靠,至少与一般的业务应用程序相比是这样。你对.NET Framework的了解越多越好,除非你知道如何做得更好,并且你已经测试了你的方法,提交了它进行配对审查,等等。
在
StringBuilder
的情况下,你几乎不能对你的代码进行单元测试。让 .NET Framework 代替您生成 HTML 意味着您可以更专注于您操作的实际对象,并且测试它们稍微容易一些。
那么,什么是最好的解决方案?
就个人而言,如果我坚持使用经典 ASP.NET(与 ASP.NET MVC 相反(,我会使用 HTML 模板创建一个专用控件。
如果由于某些原因这是不可能的,那么选择HtmlGenericControl
:它抽象了 HTML 并让您专注于对象本身。
如果你需要编写干净、可读的HTML代码,HtmlGenericControl
将是一个负担,你将不得不选择字符串连接或一些模板系统。 ASP.NET 控件以生成不太好的 HTML 代码而闻名。鉴于您问题中的 HTML 代码,此限制不适用于您的情况。