0

私が設計している Web サイトでは、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);        
    }
}

動的コントロールを作成する良い方法を教えてください??

4

1 に答える 1

5

最適なコード:

  • 読みにくいコードが 50 行以上含まれていない (同意します。読めないわけではありませんが、マイナーなリファクタリングが役立ちます)。

  • width、などのプレゼンテーション関連の HTML 属性とともに、CSS を HTML と混合しない

  • JavaScript を使用しませんalert

あなたの質問に戻りましょう。どちらが良いですか:StringBuilderまたはHtmlGenericControl

非常にあいまいな用語である方がよいので、少し異なる質問に答えてみましょう。

  1. どちらが速いですか?

    おそらくStringBuilder、それが問題ではないことを考えると。まったく。イメージのダウンロードに費やされた時間 (たとえば 2 秒、つまり 2000 ミリ秒) と比較すると、 と のパフォーマンスの比較はStringBuilderおそらくHtmlGenericControl1 ミリ秒未満です。1ミリ秒無駄にすることが重要ですか?2 000 ミリ秒かかるプロセスでは?

  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

    厳密に型指定されたオブジェクトから HTML を生成するタスクを .NET Framework に任せていれば、これらの間違いのほとんどすべてを簡単に回避できたはずです。

  3. どちらがより読みやすいですか?

    IMO、どちらも。HTML コードはきれいな方法で記述できるため、非常に読みやすくなります。同様に、コードがくだらないものである場合、組み込みコントロールへのすべての呼び出しで簡単に迷子になります。

  4. どちらがより信頼できますか?

    .NET Framework は、少なくとも平均的なビジネス アプリケーションと比較して、十分にテストされており、特に信頼性が高いと想定されています。.NET Framework を信頼すればするほど、より良い方法を知っていて、アプローチをテストしたり、ペア レビューに提出したりしない限り、より良い結果が得られます。

    の場合StringBuilder、コードの単体テストはほとんどできません。.NET Framework に代わりに HTML 生成を行わせるということは、操作する実際のオブジェクトにより集中できることを意味し、それらのテストが少し簡単になります。

それで、唯一の最善の解決策は何ですか?

個人的には、(ASP.NET MVC とは対照的に) 従来の ASP.NET に固執する場合は、HTML テンプレートを使用して専用のコントロールを作成します

何らかの理由でこれが不可能な場合は、HTML を抽象化し、オブジェクト自体に集中できるようにすることを選択します。HtmlGenericControl

クリーンで読みやすい HTML コードを作成する必要がある場合HtmlGenericControl、それは負担になり、文字列連結または何らかのテンプレート システムを選択する必要があります。ASP.NET コントロールは、あまり良くない HTML コードを生成することで知られています。質問の HTML コードを考えると、この制限はあなたのケースには当てはまりません。

于 2013-07-09T12:03:55.047 に答える