gpt4 book ai didi

jquery - 使用 mvc 2 和 jquery/ajax 进行流畅上传

转载 作者:行者123 更新时间:2023-12-03 22:33:55 24 4
gpt4 key购买 nike

我正在尝试在 jquery ui 对话框中进行流畅的上传。我已经很好地上传了文件,并且我已经检查了示例,它们最终都重新加载了整个页面。我已经设法做到了,因此它不会通过设置 AutoPostBackAfterUpload="false"

在上传后进行最终回发来处理文件

所以它现在将文件放在服务器上,并使用随机 GUID 名称。它得到的响应如下所示:

{
state : "Complete",
reason : "NotTerminated",
percentComplete : 100.00,
percentCompleteText : "100.00 %",
contentLengthText : "826 KB",
transferredLengthText : "826 KB",
remainingLengthText : "0 bytes",
currentFileName : "Desert.jpg",
currentFileIndex : "1",
timeElapsedText : "1 second",
timeElapsedShortText : "00:01",
timeRemainingText : "",
timeRemainingShortText : "00:00",speedText : "596 KB/sec"
}

所以我需要知道的是:当你将 AutoPostBackAfterUpload 设置为 true 时,我如何 ajaxly 发布光滑上传自动执行的操作。

这是我的代码: <% Html.BeginForm("OrganizationMemberEditContactSectionChangePhoto", "OrganizationMember", FormMethod.Post, New With {.id = "uploadForm", .enctype = "multipart/form-data"})%>

    <kw:SlickUpload ID="SlickUpload1" runat="server" AutoPostBackAfterUpload="false"  UploadFormId="uploadForm" ShowDuringUploadElements="cancelButton" HideDuringUploadElements="uploadButton" MaxFiles="1" AutoUploadOnPostBack="false" ProgressInterval="200">
<DownlevelSelectorTemplate>
<input type="file" />
</DownlevelSelectorTemplate>
<UplevelSelectorTemplate>
<input type="button" value="Add File" />
</UplevelSelectorTemplate>
<FileTemplate>
<kw:FileListRemoveLink runat="server">[x] remove</kw:FileListRemoveLink>
<kw:FileListFileName runat="server" />
<kw:FileListValidationMessage runat="server" ForeColor="Red" />
</FileTemplate>
<ProgressTemplate>
<table width="99%">
<tr>
<td>
Uploading <kw:UploadProgressElement ID="UploadProgressElement1" runat="server" Element="FileCountText" />,
<kw:UploadProgressElement ID="UploadProgressElement2" runat="server" Element="ContentLengthText">(calculating)</kw:UploadProgressElement>.
</td>
</tr>
<tr>
<td>
Currently uploading:
<kw:UploadProgressElement ID="UploadProgressElement3" runat="server" Element="CurrentFileName" />,
file <kw:UploadProgressElement ID="UploadProgressElement4" runat="server" Element="CurrentFileIndex">&nbsp;</kw:UploadProgressElement>
of
<kw:UploadProgressElement ID="UploadProgressElement5" runat="server" Element="FileCount" />.
</td>
</tr>
<tr>
<td>
Speed:
<kw:UploadProgressElement ID="UploadProgressElement6" runat="server" Element="SpeedText">(calculating)</kw:UploadProgressElement>.
</td>
</tr>
<tr>
<td>
About
<kw:UploadProgressElement ID="UploadProgressElement7" runat="server" Element="TimeRemainingText">(calculating)</kw:UploadProgressElement> remaining.
</td>
</tr>
<tr>
<td>
<div style="border: 1px solid #008800; height: 1.5em; position: relative">
<kw:UploadProgressBarElement ID="UploadProgressBarElement1" runat="server" Style="background-color: #00ee00; width: 0; height: 1.5em" />
<div style="text-align: center; position: absolute; top: .15em; width: 100%">
<kw:UploadProgressElement ID="UploadProgressElement8" runat="server" Element="PercentCompleteText">(calculating)</kw:UploadProgressElement>
</div>
</div>
</td>
</tr>
</table>
</ProgressTemplate>
</kw:SlickUpload>
<p>
<input type="button" value="Upload" id="uploadButton" />
<a href="javascript:kw.get('<%=SlickUpload1.ClientID %>').cancel()" id="cancelButton" style="display:none">Cancel</a>
</p>
<%Html.EndForm()%>
<script type="text/javascript">
var theThing;
var urlToPost = "theUrlThatHandlesThePostBack";
function v2SetUpPhotoDialog() {

theThing = kw.get("<%=SlickUpload1.ClientID %>");
theThing.add_OnUploadEnded(function (status) {
var data = $('#uploadForm').serialize();
$.ajax({
type: 'POST',
url: urlToPost,
data: data,
success: function () {
v2RegularNotice('success');
},
error: function () {
v2RegularNotice('fail');
}
});
});

$('#uploadButton').live('click', function () {
theThing = kw.get("<%=SlickUpload1.ClientID %>");
theThing.submit();
return false;
// kw.get("<%=SlickUpload1.ClientID %>").submit();
});
}
</script>

如您所见,我尝试让 OnUploadEnded 将状态作为参数,但它没有填充该操作的状态参数所需的任何有用信息。它当前序列化表单并发送该表单,但它仅填充 1 个字段。 kw_uploadId。

Controller 操作尚未执行任何操作,它只是尝试将 UploadStatus 作为参数。但如果我只是序列化表单,它就是空的。

我确信我遗漏了一些明显的东西。但我不明白。我发现文档有点难以理解,而且在这种情况下没有帮助。

谢谢!

最佳答案

与 Patrica 合作后,此问题已得到解决。我们还遇到了一些障碍,但基本情况如下:

这里的主要问题是 SlickUpload 设计的限制:添加 SlickUpload 控件后,您无法将其从 DOM 中删除,然后再重新添加。这将在 SlickUpload6 中得到解决,但不幸的是,这是当前版本的限制。为了解决这个问题,我们在选项卡或对话框不可见时隐藏控件,而不是实际删除它。

还有一个 SlickUpload 次要版本 (5.5.9),它添加了 get_UploadId() 方法,以便更轻松地获取当前上传的上传 ID。

此代码(来自上面):

kw_uploadId: document.getElementById("kw_uploadId").value,

变成:

kw_uploadId: theThing.get_UploadId(),

您可以在这里获取最新版本:SlickUpload 5.5.9

关于jquery - 使用 mvc 2 和 jquery/ajax 进行流畅上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com