Gur*_*Rao 0 c# asp.net optimization html5
在我正在设计的网站中,我需要显示使用asp:FileUpload控件上传的图像.所以上传后我使用字符串生成器添加div,img和textarea,然后将其加载到我已经创建的面板中.因此,最好使用Stringbuilder加载内部HTML,或者使用HtmlgenericControls添加像image和textarea这样的控件是好的.我正在使用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>
Run Code Online (Sandbox Code Playgroud)
和后端如下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请让我知道哪个是创建动态控件的好方法?
最佳代码:
不包含超过50行难以阅读的代码(同意,这不是不可读的,但仍然,轻微的重构会有所帮助),
不能与HTML CSS混合,加上作为演示相关的HTML属性,例如width,
让我们回到你的问题.哪一个更好:StringBuilder或者HtmlGenericControl?
更好的是一个非常模糊的术语,让我们回答一堆略有不同的问题:
哪一个更快?
可能StringBuilder,鉴于它并不重要.完全没有.相比于花下载的图像(比如两秒钟即2000毫秒),中之间的业绩比较的时间StringBuilder,并HtmlGenericControl会比一毫秒少极有可能.浪费1毫秒是否重要.在一个需要2 000毫秒的过程中.
哪一个更安全?
您在以下代码中发现了多少错误?
sb.Append("<div class=\"illustration\"><span-class=\"contents\">")
.Append("<img class=" + "\"loadimg\"" + "srv=" + "\"" + newpath + "\"" + ">")
.Append("/div></span>");
Run Code Online (Sandbox Code Playgroud)
让我们来看看:
div并span倒置,div缺少'<'字符,img 缺少'/'(如果输出是XHTML),src写的拼写错误srv,span-class本来应该的span class,src(srv)之前没有空格.通过让.NET Framework从强类型对象生成HTML的任务,几乎可以轻松避免所有这些错误.
哪一个更具可读性?
IMO,都没有.HTML代码可以用干净的方式编写,使其具有极高的可读性.以同样的方式,如果代码是一块废话,那么在所有那些对嵌入式控件的调用中很容易丢失.
哪一个更可靠?
假设.NET Framework经过严格测试并且特别可靠,至少与普通业务应用程序相比.您对.NET Framework的信任越多越好,除非您知道如何做得更好并且您已经测试了您的方法,提交它以进行配对评审等.
在这种情况下StringBuilder,您几乎无法对代码进行单元测试.让.NET Framework在您的位置执行HTML生成意味着您可以更专注于您操作的实际对象,并且测试它们会稍微容易一些.
那么,最好的解决方案是什么?
就个人而言,如果我坚持使用经典的ASP.NET(与ASP.NET MVC相比),我会使用HTML模板创建一个专用控件.
如果由于某些原因,这是不可能的,那么选择HtmlGenericControl:它抽象HTML并让你专注于对象本身.
如果您需要编写干净,可读的HTML代码,那HtmlGenericControl将是一种负担,您将不得不选择字符串连接或一些模板系统.众所周知,ASP.NET控件用于生成不太好的HTML代码.鉴于您的问题中的HTML代码,此限制不适用于您的情况.
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |