ポップアップ ウィンドウからファイルをアップロードし、サーバー上のファイルを検証して、メッセージをクライアントに送り返します。このメッセージは、アップロード コントロールと同じポップアップ ウィンドウに表示される必要があります。(親ページにはありません) ポップアップと剣道アップロード コントロールに剣道ウィンドウを使用しています。アップロード コントロールを使用してファイルを同期的にアップロードしようとしています。アップロード コントロールはポップアップ ウィンドウにあります。JavaScript の「Success」イベントをアップロード コントロールにアタッチしましたが、Success イベントは発生しません。
問題:
1. アクション メソッドは JSON メッセージを返しますが、クライアントで Javascript の成功イベントが発生しないため、応答メッセージを処理できませんでした。(非同期操作でのみ発生しますか?)
2. 他のオプションとして、ModelState にメッセージを追加し、JSON の代わりにアップロード ビューを返すことができますが、ビューが返されると、アップロード ビューはポップアップとして表示されず、代わりに表示されます。ページとして、また URL が変更されます。
3. ポップアップ ウィンドウを閉じないように [OK] ボタンを構成するにはどうすればよいですか。
ここで選択できるのは非同期アップロードだけですか?
注:Telerikがここで報告したように、IEは進行状況バーを報告せず、選択したファイルは毎回サーバーにアップロードされないため、非同期オプションを使用していません。そのため、進行状況バーのアップロードを無効にしても問題が残ると考えています。しかし、この問題に関する詳細は見つかりませんでした。プログレスバーを無効にすると、IE 10,11 のすべてのファイルがアップロードされることを Kendo Upload が保証する場合は、非同期オプションの使用を検討してください。
4. プログレス バーを無効にするにはどうすればよいですか?
これはインデックスページ(親ページ)です
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script src="~/Scripts/FileUpload.js"></script>
<script>
$(document).ready(function () {
var uploadwindow = $("#uploadwindow");
$("#btnUploads").click(function (e) {
uploadwindow.data("kendoWindow")
.open()
.center();
});
});
</script>
<p/><p />
<button type="button" id="btnUploads">Show Window</button>
@(Html.Kendo().Window()
.Name("uploadwindow")
.Title("Select the file to upload")
.Draggable()
.Resizable()
.Width(600)
.Modal(true)
.Visible(false)
.LoadContentFrom("Upload", "FileUpload")
)
ポップアップウィンドウ
@using (Html.BeginForm("Upload", "FileUpload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@(Html.Kendo().Upload()
.Name("file")
.Multiple(false)
.Events(x => x.Success("onSuccess"))
)
<button type="submit">Ok</button>
}
FileUpload.js
function onSuccess(e) {
//my custom method to show message
ShowMessage(e.response.message);
}
MVC コントローラー
public class FileUploadController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Upload()
{
return View();
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
return Json(new { message = "This is from server" }, "text/plain");
//Option 2
// if i return View here then it does not appear as popup instead it renders as page
//ModelState.AddModelError("Some error");
//return View();
}
}