我有一個頁面,您可以在其中編輯客戶端。在此頁面上,您還可以上傳客戶端的文件。你點擊一個按鈕,打開一個jQuery對話框,你上傳一個文件,然後點擊保存。使用部分視圖在jQuery對話框中上傳文件
這裏是我的/客戶/編輯觀點:
<script type="text/javascript" language="javascript">
$(document).ready(function() {
// add file click event
$("a#addFile").click(function() {
$.ajax({
url: '@Url.Content("/ClientFiles/Create/")' + @Model.ClientId,
context: document.body,
success: function (data) {
// open dialog with Create partial view data
$("#dialog-add").html(data).dialog("open");
}
});
return false;
});
// add file dialog settings
$("#dialog-add").dialog({
modal: true,
buttons: {
"Save": function() {
$.validator.unobtrusive.parse("#AddFileForm");
if ($("#AddFileForm").valid()) {
$.post("/ClientFiles/Create", $("#AddFileForm").serialize(),
function (data) {
$("#dialog-add").dialog("close"); // close dialog
});
}
}
}
});
});
</script>
@using (Html.BeginForm("Edit", "Clients", FormMethod.Post))
{
@Html.HiddenFor(m => m.ClientId)
<a id="addFile">Add a new file</a>
<div id="dialog-add" title="" style="display:none"></div>
<input type="submit" value="Save" />
}
這裏是我的/ ClientFiles /創建局部視圖:
@model Models.ClientFileViewModel
@using (Html.BeginForm("Create", "ClientFiles", FormMethod.Post, new { @id = "AddFileForm", enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.ClientId)
@Html.TextBoxFor(model => model.ModelFile, new { type = "file" })
@Html.ValidationSummary()
}
這裏是我的ClientFileViewModel:
public class ClientFileViewModel
{
[ScaffoldColumn(false)]
public int ClientFileId { get; set; }
public int ClientId { get; set; }
public HttpPostedFile ModelFile { get; set; }
}
最後,我的ClientFilesController方法:
public ActionResult Create(int id)
{
return PartialView(new ClientFileViewModel { ClientId = id });
}
public JsonResult Create(ClientFileViewModel viewModel)
{
if (ModelState.IsValid)
{
if (viewModel.ModelFile != null)
{
// upload file here
}
}
return Json(new { success = true });
}
所以一切工作,直到我發佈到Create(ClientFileViewModel viewModel)
。當我瀏覽調試器時,視圖模型包含ClientId
,但ModelFile
爲空。
我是否做了錯誤的事情導致文件不能與視圖模型一起傳遞?
不似乎工作,當我發佈到我的'Create'方法時'ModelFile'仍然爲空。任何其他想法? – Steven 2012-04-24 17:46:39
當你檢查FireBug時,請求是怎麼樣的?你是否正確地將數據發送爲'multipart/form-data'? – 2012-04-24 17:55:39
哦,但等一下。你正在使用AJAX?您無法使用AJAX上傳文件。讓我更新我的答案。 – 2012-04-24 17:56:43