相当简单。我只是希望用户能够在上传之前添加一个标题到文件。(是的,我鼓励正确的文件名,但这不是重点。)
<asp:TextBox runat="server" ID="txtDocumentTitle" />
<ajaxToolkit:AjaxFileUpload runat="server" ID="ajxUploadNDA" OnUploadComplete="ajxUpload_Complete" Width="400px" /><br />
protected void ajxUpload_Complete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
MyFile f = new MyFile();
f.DocumentType = e.ContentType;
f.FileBytes = e.GetContents();
f.FileName = e.FileName;
f.DocumentCategory = "Package Files";
f.FileUploaded = DateTime.Now;
f.DocumentTitle = txtDocumentTitle.Text;
f.Save();
DataBind();
}
但是,当设置断点时,txtDocumentTitle.Text总是为空。我似乎无法强制一个完整的回发或找到任何其他方法来获得当前的文本框的价值。我可以允许用户在文件上传后编辑这些属性,但出于一些原因,这不是我喜欢的设计。(它鼓励在缺省情况下保留值。)
我试过:
protected void Page_Init(object sender, EventArgs e)
{
ScriptManager.GetCurrent(Page).RegisterPostBackControl(ajxUploadNDA);
ScriptManager.GetCurrent(Page).SupportsPartialRendering = false;
ScriptManager.GetCurrent(Page).EnablePartialRendering = false;
}
我试过了
<ajaxToolkit:AjaxFileUpload runat="server" ID="ajxUploadNDA" OnUploadComplete="ajxUpload_Complete" Width="400px" onchange="if (confirm('Upload ' + this.value + '?')) this.form.submit();" />
任何建议都是受欢迎的。
发布于 2012-10-09 16:15:37
我通过在“设置文档标题”中添加一个按钮来解决这个问题,该按钮将文本框的值添加到会话中。然后,ajxUpload_Complete函数使用这个会话变量在上传时将标题设置为该会话值。
有几个原因很草率,但这是我所能做的最好的。
在Page_Load上:
if (!Page.IsPostBack && !ajxUploadNDA.IsInFileUploadPostBack)
{
Session.Remove("DefaultDocumentCategory");
lblDocumentCategory.Text = "Data Package Files";
Session.Remove("DefaultDocumentTitle");
lblDocumentTitle.Text = "Data Package File";
}
protected void btnChangeDocumentAttributes_Click(object sender, EventArgs e)
{
lblDocumentCategory.Text = cboDocumentCategory.SelectedValue;
lblDocumentTitle.Text = txtDocumentTitle.Text;
Session["DefaultDocumentCategory"] = lblDocumentCategory.Text;
Session["DefaultDocumentTitle"] = lblDocumentTitle.Text;
}
我还添加了一个虚拟按钮到页面,以强制回发,刷新我的网格视图,显示所有上传的文件。
<asp:Button ID="btnForcePostBack" runat="server" Text="" Style="background-color: Transparent; color: inherit; border-style: none;" />
protected void ajxUpload_Complete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
MyFile f = new MyFile();
f.DocumentType = e.ContentType;
f.FileBytes = e.GetContents();
f.FileName = e.FileName;
f.FileUploaded = DateTime.Now;
if (Session["DefaultDocumentCategory"] == null || Session["DefaultDocumentCategory"].ToString() == string.Empty) f.DocumentCategory = "Data Package Files";
else f.DocumentCategory = Session["DefaultDocumentCategory"].ToString();
if (Session["DefaultDocumentTitle"] == null || Session["DefaultDocumentTitle"].ToString() == string.Empty) f.DocumentTitle = "Data Package File";
else f.DocumentTitle = Session["DefaultDocumentTitle"].ToString();
f.Save();
ajxUploadNDA.Page.ClientScript.RegisterStartupScript(this.GetType(), "RefreshParent", "<script type='text/javascript'>var btn = window.parent.document.getElementById('btnForcePostBack');if (btn) btn.click();</script>");
}
发布于 2014-04-04 09:16:58
其他的答案我都找不到了。最后,我将文本框放在ajax更新面板上。然后,我为textbox OnTextboxChanged创建了一个事件,该事件存储了会话中的值。然后,我可以从会话中获取UploadComplete中的值。
发布于 2012-10-03 12:33:49
在使用ajax上载时,您只能立即保存,第二步是单独调用,从保存的位置获取文件并对其进行操作。我在使用Uploadify和Uploadifive进行多个异步上传时遇到了同样的问题。上传多个文件时,我的第一步是保存到临时位置,然后进行第二次调用来检索、调整大小并将其保存到云(Azure Storage)。这是不可能设置一个断点,因为线程到处都是。这是一种奇怪的行为,特别是在上传单个文件时,但这是首先保存然后使用单独调用检索的最佳解决方案。
https://stackoverflow.com/questions/12715749
复制