C# 如何通过动态加载控件将数据保存到数据库
在我的网站中,我使用asp Fileupload控件上载文件,单击上载按钮,将显示一个面板,其中上载的图像将与一个文本区域一起显示,以写入图像描述。写下描述后,我必须将图像保存到数据库中,并单击动态创建的保存按钮进行描述。请给出一些如何做到这一点的想法。我的前端代码如下:C# 如何通过动态加载控件将数据保存到数据库,c#,asp.net,sql-server,file-upload,C#,Asp.net,Sql Server,File Upload,在我的网站中,我使用asp Fileupload控件上载文件,单击上载按钮,将显示一个面板,其中上载的图像将与一个文本区域一起显示,以写入图像描述。写下描述后,我必须将图像保存到数据库中,并单击动态创建的保存按钮进行描述。请给出一些如何做到这一点的想法。我的前端代码如下: <form id="form1" runat="server"> <div class="transbox" id="mainbk" runat="server" style="position:
<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);
}
}
我的后端代码如下:
<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);
}
}
受保护的无效上载文件\u单击(对象发送方,事件参数e)
{
if(上传images.HasFiles)
{
int-tid=0;
字符串fileExt=Path.GetExtension(UploadImages.FileName.ToLower();
如果(fileExt==“.jpeg”| | fileExt==”.png“| | fileExt==”.jpg“| | fileExt==”.bmp”)
{
HtmlGenericControl d=新的HtmlGenericControl(“div”);
按钮btnsave=新按钮();
btnsave.Text=“保存”;
某人加上(“”);
某人附加(“写描述”);
foreach(UploadImages.PostedFiles中的HttpPostedFile uploadedFile)
{
id+=1;
tid=tid+1;
字符串textid=“txt”+tid;
filepath=Server.MapPath(“~/Images/Gallery/”+uploadedFile.FileName);
uploadedFile.SaveAs(文件路径);
newpath=“../Images/Gallery/”+uploadedFile.FileName;
尝试
{
updtpanel.Visible=true;
某人加上(“”);
某人加上(“”);
某人加上(“”);
某人加上(“”);
}
捕获(例外情况除外)
{
响应。写入(例如消息);
}
}
某人加上(“”);
d、 InnerHtml=sb.ToString();
updtpanel.Controls.Add(d);
updtpanel.Controls.Add(btnsave);
}
其他的
{
Page.ClientScript.RegisterStartupScript(GetType(),“msgbox”,“警报('请仅选择图像文件!!');”,true);
}
}
其他的
{
Page.ClientScript.RegisterStartupScript(GetType(),“msgbox”,“警报('请先选择一个文件!!');”,true);
}
}
这是上传前的样子:
上传后看起来像这样
在上传图片下方的文本框中输入描述后,请让我知道如何将其保存到数据库中
我知道每个人都知道facebook是如何上传相册图片的。类似地,我想在上传图像后再做,然后将其保存在数据库中。如果我没有错的话,Facebook中的描述文本框将动态创建。他们将如何引用每个描述文本框的内容并将其保存在数据库中。希望我能说清楚
在database vision中,您需要一个至少有3列的表,首先是一个称为BLOB列的VARBINARY列来存储文件,其次是一个VARCHAR列来存储文件扩展名(例如.gif、.jpeg),第三是一个VARCHAR或NVARCHAR列来存储标题。但关键是在应用程序中,您需要将文件转换为字节数组,然后将其作为varbinary参数传递给SQLServer
private Byte[] getDocumentFormatter(string path)
{
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
br.Close();
fs.Close();
return bytes;
}
但在web环境中,您可以使用输出缓冲区或为站点提供的任何解决方案来替换path,然后将其连同文件标题和文件扩展名一起传递给sql server中的存储过程。动态创建“保存”按钮的具体原因是什么?是否切换可见性工作?@Karthik。。你看,我在设计时只创建了一个面板,在运行时添加了其中的所有内容。没有具体原因,但由于我遵循的设计,我不得不这样做。嗯,我会考虑一下,我是否可以改变设计@卡提克。。假设我在设计本身中创建“保存”按钮,并在其可见性之间切换。我还将右键单击该按钮的事件。但现在我只想从图像下的每个文本区域中检索数据内容,并将其保存在DB中。我不能在design n中创建它,它必须在运行时本身创建。那么你知道如何从动态创建的文本区域中获取内容吗?我的Database中已经有一个表“slider”,它有3列,即slide int PK、slurl varchar、slalt varchar。除此之外,我还需要添加其他内容吗???是的,您需要再添加两列,例如myFile VARBINARY(MAX)和myFileExtension VARHCAR(10)。因为您需要从VARBINAY格式化和构建文件,并且它不包括文件的扩展名,所以需要保存它并在需要时重新使用它。