问题描述
我已经创建了一个用户控制多文件上传
,
我需要创建其自定义的控制,这样我可以有控制的DLL。
什么是我能做到这一点的方法是什么?
usercontrol.ascx
<脚本SRC =脚本/ jQuery的-1.4.1.min.js类型=文/ JavaScript的>< / SCRIPT>
<脚本SRC =脚本/ jquery.MultiFile.pack.js类型=文/ JavaScript的>< / SCRIPT>
< DIV><% - 接受属性可用于像接受=PNG | JPG - %GT;
多文件上传< BR />
< ASP:文件上传ID =FileUpload10=服务器类=多接受=/>
< ASP:按钮的ID =按钮3=服务器文本=提交的OnClick =jQueryUploadFiles/> < BR />
< ASP:标签ID =lblMessage=服务器的EnableViewState =假前景色=绿色/>
< BR />
< ASP:标签ID =lblError=服务器的EnableViewState =假前景色=红/>
< / DIV>
usercontrol.ascx.cs
私人无效FileUploadUsingJQuerySelectionMethod()
{
//如果文件被选中
HttpFileCollection文件= Request.Files;
的for(int i = 0; I< files.Count;我++)
{
HttpPostedFile文件=文件[I]
如果(file.ContentLength大于0)
{
字符串路径= ConfigurationManager.AppSettings [文件路径];
字符串文件名= Path.GetFileName(file.FileName); //现在将文件保存到磁盘
file.SaveAs(路径+文件名); lblMessage.Text + =文件:其中; B>中+文件名+< / B>!成功上传< BR />中;
}
}
}
我试着像下面这样:
公共类MultipleFileUpload:WebControl的
{
#地区在此申报控制
标签lblMessage;
标签lblError;
文件上传FileUpload10;
按钮btnUpload;
#endregion [可绑定(真)
[类别(外观)]
[默认值()]
[本地化(真)
公共字符串的文件路径
{//道具来获得文件路径
得到
{
字符串s =(字符串)的ViewState [文件路径];
返回((S == NULL)[+ this.ID +]:秒);
} 组
{
的ViewState [文件路径] =值;
}
} 保护覆盖无效RenderContents(HtmlTextWriter的输出)
{
output.Write(文件路径);
} //这里创建您的控件布局(HTML)
//所有的HTML code&包括LT; DIV>
//添加所有控件的< DIV>中低于code是非常粗略< BR />
//你也需要注册脚本标记和脚本添加到它< BR /> 保护覆盖无效的CreateChildControls()
{
base.CreateChildControls();
表的表=新表();
this.Controls.Add(表);
lblMessage =新标签();
lblMessage.ID =lblMessage; lblError =新标签();
lblError.ID =lblError; FileUpload10 =新的FileUpload();
FileUpload10.ID =FileUpload10; btnUpload =新按钮();
btnUpload.ID =btnUpload;
btnUpload.Text =提交< BR />中;
// table.Controls.Add(lblMessage);
}
//调用该方法被不断要求
私人无效FileUploadUsingJQuerySelectionMethod()
{
//如果文件被选中
HttpFileCollection文件= HttpContext.Current.Request.Files;
的for(int i = 0; I< files.Count;我++)
{
HttpPostedFile文件=文件[I]
如果(file.ContentLength大于0)
{
路径字符串=文件路径;
字符串文件名= Path.GetFileName(file.FileName); //现在将文件保存到磁盘
file.SaveAs(路径+文件名); lblMessage.Text + =文件:其中; B>中+文件名+< / B>!成功上传< BR />中;
}
}
}
您可以把你的控制下在这里详细步骤一个dll:的。
我认为这将是值得你的用户控件转换到正确的服务器控制,但是,它并不难,你最终会得到更易于维护code(你会看到,这个过程描述的有颇为尴尬的)。
I have created one user control for multiple file upload
,i need to create its custom control so that I can have a dll of that control.What are the ways that I can do this?
usercontrol.ascx
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.MultiFile.pack.js" type="text/javascript"></script>
<div><%-- accept attribute can be used like accept="png|jpg"--%>
Multiple File Upload<br />
<asp:FileUpload ID="FileUpload10" runat="server" class="multi" accept="" />
<asp:Button ID="Button3" runat="server" Text="Submit" OnClick="jQueryUploadFiles" />
<br />
<asp:Label ID="lblMessage" runat="server" EnableViewState="false" ForeColor="Green" />
<br />
<asp:Label ID="lblError" runat="server" EnableViewState="false" ForeColor="Red" />
</div>
usercontrol.ascx.cs
private void FileUploadUsingJQuerySelectionMethod()
{
// check if file has been selected
HttpFileCollection files = Request.Files;
for (int i = 0; i < files.Count; i++)
{
HttpPostedFile file = files[i];
if (file.ContentLength > 0)
{
string path = ConfigurationManager.AppSettings["FilePath"];
string fileName = Path.GetFileName(file.FileName);
// now save the file to the disk
file.SaveAs(path + fileName);
lblMessage.Text += "File : <b>" + fileName + "</b> uploaded successfully !<br />";
}
}
}
I tried like following:
public class MultipleFileUpload : WebControl
{
#region declare controls here
Label lblMessage;
Label lblError;
FileUpload FileUpload10;
Button btnUpload;
#endregion
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string FilePath
{// prop to get filepath
get
{
String s = (String)ViewState["FilePath"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["FilePath"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(FilePath);
}
// create the layout (html) of your control here
// all the HTML code including <div>
// Add all controls to the <div>, below code is very crude.<br/>
// Also you need to register the script tags and add the script to it<br/>
protected override void CreateChildControls()
{
base.CreateChildControls();
Table table = new Table();
this.Controls.Add(table);
lblMessage = new Label();
lblMessage.ID = "lblMessage";
lblError = new Label();
lblError.ID = "lblError";
FileUpload10 = new FileUpload();
FileUpload10.ID = "FileUpload10";
btnUpload = new Button();
btnUpload.ID = "btnUpload";
btnUpload.Text = "Submit <br/> ";
// table.Controls.Add(lblMessage);
}
// invoke this method were ever required
private void FileUploadUsingJQuerySelectionMethod()
{
// check if file has been selected
HttpFileCollection files = HttpContext.Current.Request.Files;
for (int i = 0; i < files.Count; i++)
{
HttpPostedFile file = files[i];
if (file.ContentLength > 0)
{
string path = FilePath;
string fileName = Path.GetFileName(file.FileName);
// now save the file to the disk
file.SaveAs(path + fileName);
lblMessage.Text += "File : <b>" + fileName + "</b> uploaded successfully !<br />";
}
}
}
You can put your control in a dll following the steps detailed here: Turning an .ascx User Control into a Redistributable Custom Control.
I think that it would be worth converting your user control to a proper server control, however, it's not that hard and you would end up with easier to maintain code (as you will see, the process described there is rather awkward).
这篇关于如何创建现有用户控件的自定义控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!