- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开始研究 AjaxFileUpload 控件,特别是 ContextKeys 属性。但是,我不明白如何使用它。
The documentation提到 AjaxFileUpload 时,ContextKeys 用于在上传文件时将信息传递给服务器。但没有提供示例。网上有没有我可以看的例子?
最佳答案
虽然这样的功能没有实现(我相信它是计划好的,但由于某些原因被推迟了),但没有什么可以保护你自己实现它。为此,您需要下载 AjaxControlToolkit 源代码并根据需要对其进行调整。
会有很多点,所以你可以先准备一杯咖啡:)
我将显示必须更改的文件名的更改。
服务器/AjaxControlToolkit/AjaxFileUpload/AjaxFileUpload.cs 文件
首先,将 ContextKeys 属性添加到 AjaxFileUploadEventArgs.cs 文件(位于同一文件夹中):
/// <summary>
/// Gets or sets the context keys.
/// </summary>
public string ContextKeys
{
get;
set;
}
var eventArgs = new AjaxFileUploadEventArgs(guid, AjaxFileUploadState.Success,
"Success", uploadedFile.FileName,
uploadedFile.ContentLength, uploadedFile.ContentType,
stream.ToArray());
// NEW CODE HERE
eventArgs.ContextKeys = this.Page.Request.Form["contextKeys"];
Sys.Extended.UI.AjaxFileUpload
客户端类(文件
AjaxFileUpload.pre.js )
_html5UploadFile
方法如下:
_html5UploadFile: function (fileItem) {
this._guid = Sys.Extended.UI.AjaxFileUpload.utils.generateGuid();
var uploadableFile = fileItem.get_fileInputElement();
var fd = new FormData();
fd.append("fileId", uploadableFile.id);
fd.append("Filedata", uploadableFile.file);
if (this.contextKeys) {
if (typeof this.contextKeys !== "string") {
this.contextKeys = Sys.Serialization.JavaScriptSerializer.serialize(this.contextKeys);
}
fd.append("contextKeys", this.contextKeys);
}
$common.setVisible(this._progressBar, true);
this._setDisableControls(true);
this._html5SetPercent(0);
this._setStatusMessage(String.format(Sys.Extended.UI.Resources.AjaxFileUpload_UploadingHtml5File, uploadableFile.file.name, Sys.Extended.UI.AjaxFileUpload.utils.sizeToString(uploadableFile.file.size)));
var url = this._postBackUrl;
if (url.indexOf("?") != -1)
url += "&";
else
url += "?";
this._webRequest = new Sys.Net.WebRequest();
this._executor = new Sys.Net.XMLHttpExecutor();
this._webRequest.set_url(url + 'contextkey=' + this._contextKey + '&guid=' + this._guid);
this._webRequest.set_httpVerb("POST");
this._webRequest.add_completed(this.bind(this._html5OnRequestCompleted, this));
//this._executor.add_load(this.bind(this._html5OnComplete, this));
this._executor.add_progress(this.bind(this._html5OnProgress, this));
this._executor.add_uploadAbort(this.bind(this._html5OnAbort, this));
this._executor.add_error(this.bind(this._html5OnError, this));
this._webRequest.set_executor(this._executor);
this._executor.executeRequest(fd);
}
_uploadInputElement
方法:
_uploadInputElement: function (fileItem) {
var inputElement = fileItem.get_fileInputElement();
var uploader = this;
uploader._guid = Sys.Extended.UI.AjaxFileUpload.utils.generateGuid();
setTimeout(function () {
uploader._setStatusMessage(String.format(Sys.Extended.UI.Resources.AjaxFileUpload_UploadingInputFile, Sys.Extended.UI.AjaxFileUpload.utils.getFileName(inputElement.value)));
uploader._setDisableControls(true);
uploader.setThrobber(true);
}, 0);
var url = uploader._postBackUrl;
if (url.indexOf("?") != -1)
url += "&";
else
url += "?";
uploader._createVForm();
uploader._vForm.appendChild(inputElement);
if (this.contextKeys) {
if (typeof this.contextKeys !== "string") {
this.contextKeys = Sys.Serialization.JavaScriptSerializer.serialize(this.contextKeys);
}
var contextKeysInput = document.createElement("input");
contextKeysInput.setAttribute("type", "hidden");
contextKeysInput.setAttribute("name", "contextKeys");
contextKeysInput.setAttribute("value", this.contextKeys);
uploader._vForm.appendChild(contextKeysInput);
}
uploader._vForm.action = url + 'contextkey=' + this._contextKey + '&guid=' + this._guid;
uploader._vForm.target = uploader._iframeName;
setTimeout(function () {
uploader._vForm.submit();
uploader._waitTimer = setTimeout(function () { uploader._wait() }, 100);
}, 0);
}
AjaxFileUploadEventArgs
获取它的值。 UploadComplete 事件的参数如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && !AjaxFileUpload1.IsInFileUploadPostBack)
{
AjaxFileUpload1.ContextKeys = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new Dictionary<string, string> { { "1", "First" }, { "2", "Second" } });
}
protected void AjaxFileUpload1_OnUploadComplete(object sender, AjaxFileUploadEventArgs file)
{
if (!string.IsNullOrEmpty(file.ContextKeys))
{
var contextKeys = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Dictionary<string, string>>(file.ContextKeys);
}
OnClientUploadStarted
此处提议的客户端事件
link ,您可以将您的 contextKeys 从客户端传递给服务器:
function uploadStarted(sender, args) {
sender.contextKeys = { "first": "1", "second": "2" };
}
关于asp.net - 如何将 ContextKeys 属性用于 AjaxFileUpload 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080186/
我开始研究 AjaxFileUpload 控件,特别是 ContextKeys 属性。但是,我不明白如何使用它。 The documentation提到 AjaxFileUpload 时,Contex
我已经更新到 EF6,但并不好玩。我创建了一个新的迁移,它只是将两个字段更改为可为空。 public partial class AllowNullableFieldsForImage : DbMig
了解自动完成属性后 - ContextKey 我正在使用它作为优势: 每个扩展器对象的数据源将由相同的 WebMethod 处理。 这本身就是我的成就。 既然一切都已经很完美了,问题是: 当对 Aut
我是一名优秀的程序员,十分优秀!