同様の質問を調べてみましたが、残念ながらどれもうまくいかないようです。
私がやっていること: ドキュメントをアップロードするためのリンクを含むメイン ページがあります。そのリンクをクリックすると、単純なアップロード フォームを含むモーダル ウィンドウが開きます。
<div id="uploadResults">
@using (Html.BeginForm("_uploadDocument", "Request", FormMethod.Post, new { id = "uploadDoc", enctype = "multipart/form-data" }))
{
<input name="eGuid" value="@ViewBag.eGuid" id="eGuid" type="hidden" />
<input name="result" id="result" value="@ViewBag.result" type="hidden" />
<label for="attachment">Attachment:</label><input type="file" name="attachment" id="attachment" />
<br />
<input type="submit" name="submit" value="Upload" class="txtButton" />
}
</div>
フォームの送信時に、コントローラーで _uploadDocument メソッドを呼び出したいと思います。アップロードが成功したら、モーダル ウィンドウを閉じて、親ウィンドウが再び表示されるようにします。エラーが発生した場合は、モーダル ウィンドウを表示したままにして、通知テキストを表示します。
httppost のコントローラー (申し訳ありませんが、いくつかの方法を試したので、コメントアウトされたビットがいくつか表示されます):
[HttpPost]
public void _uploadDocument(string eGuid, HttpPostedFileBase attachment)
{
// store result txt
string result = "";
// check for uploaded file
if (attachment != null && attachment.ContentLength > 0)
{
// get filename
var uploadedFileName = Path.GetFileName(attachment.FileName);
var newFileName = eGuid + "_" + uploadedFileName;
// store to the shared directory
var path = System.Web.Configuration.WebConfigurationManager.AppSettings["UploadDirectory"];
var savePath = Path.Combine(path, newFileName);
try
{
attachment.SaveAs(savePath);
result = "success";
}
catch
{
result = "There was an issue uploading your file";
}
}
else
{
result = "No file was chosen for upload";
}
ViewBag.result = result;
ViewBag.eGuid = eGuid;
//return PartialView("_uploadDocument");
//return Json(new { result = result});
//return Json(result);
}
上記のフォームがあるモーダル ウィンドウ内で、次の jquery を試しました。
$("#uploadDoc").submit(function (e) {
$.post(this.action, { eGuid: $('#eGuid').val(), attachment: $('#attachment') }, function () {
$("#dialog5").dialog('close');
//alert("In");
//return false;
});
//$.post(this.action, { eGuid: $('#eGuid').val(), attachment: $('#attachment') });
return false;
});
私の結果 - 渡されたデータをシリアル化すると、成功関数が起動しますが、ドキュメントはアップロードされません (モーダル ウィンドウは閉じますが、ドキュメントはアップロードされません)。
上記のコードを使用すると、ドキュメントはアップロードされますが、送信後に空白の画面が表示されます...
私は確かに任意のポインタをいただければ幸いです!
UPDATE親ページからモーダルウィンドウを開くコードは次のとおりです。
// person look-up modal window
$(function () {
$('#dialog5').dialog({
autoOpen: false,
width: 400,
resizable: false,
title: 'Upload Document',
dataType: "json",
modal: true,
open: function (event, ui) {
var updateArea = $(this).data('area');
//alert(updateArea);
$(this).load('@Url.Action("_uploadDocument", "Request")' + '?eGuid=' + updateArea);
},
cancel: function (event, ui) {
$(this).dialog("close");
}
});
$('.attachDocument').live("click", function () {
var field = this.name;
$('#dialog5').data('area', field).dialog('open');
});
});