На веб-сайте, который я проектирую, мне нужно показать изображения, которые я загружаю с помощью asp: FileUpload control. Поэтому после загрузки я добавляю div, img и textarea с помощью построителя строк, а затем загружаю его в панель, которую я уже создал. Так что лучше использовать Stringbuilder для загрузки внутреннего HTML или полезно использовать HtmlgenericControls для добавления элементов управления, таких как изображение и текстовое поле. Я использую C#. Мой текущий способ кодирования заключается в следующем:Насколько оптимальным может быть код с динамическим добавлением элементов управления
Frontend:
<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);
}
}
Пожалуйста, дайте мне знать, какой будет хорошим способом создания динамических элементов управления ??
Ваш вопрос непонятен. Работает ли ваш текущий подход? Если нет, отметьте свой вопрос и попросите миграцию модератора в StackOverflow. Если ваш подход работает, то в чем проблема?Что вы пытаетесь оптимизировать? Почему вы думаете, что вам нужно оптимизировать? Эти детали помогут сообществу ответить на ваш вопрос или найти подходящее место для него. – GlenH7
@ GlenH7 .. Мой текущий подход работает хорошо и отлично. Проблема, о которой я обсуждала, была похожа на то, будет ли использование stringbuilder хорошим, или HtmlGenericControls обеспечивают более простые шаги, чтобы динамически включать их в HTML-теги .. Ну, я думаю, что нашел свой ответ на мою проблему .. :) Спасибо ... –