所以我有AJAX文件上傳部分(使用Jquery Form插件),它的工作完美,但我不知道文件上傳如何從ajax文件上傳後的部分模型更新?
<div>
@Html.Partial("PhotoUpload", Model.Place)
</div>
這裏我打電話的部分,並給予它部分後更新模型值的模型。
@model PlaceMap.DAL.Entities.Place
@using (Html.BeginForm("PhotoUpload", "Place", FormMethod.Post, new { @id = "photoUpload", enctype = "multipart/form-data" }))
{
{
@Html.ValidationSummary(true, "Image upload was unsuccessful")
@Html.HiddenFor(m => m.Photo)
<input type="file" id="file" name="file"/>
<input type="submit" id="sbm" />
}
}
這是局部視圖,接受模型和形式的代碼上傳
var options = {
url: "/Place/PhotoUpload",
dataType: "json",
clearForm: true,
resetForm: true,
success: showResponse
};
function showResponse(responseText, statusText, xhr, $form)
{
$('#photo').append('<img src="/Images/Places/' + responseText.Photo + '" />');
}
$('#photoUpload').submit(function()
{
$('#photoUpload').ajaxSubmit(options);
return false;
});
JavaScript代碼插件
[Authorize]
[HttpPost]
public ActionResult PhotoUpload(string Photo, HttpPostedFileBase file)
{
try
{
using (var ms = new MemoryStream())
{
//some logic here
return Json(new { Photo = filename });
}
}
catch (ArgumentException)
{
}
return PartialView();
}
控制器操作代碼。它返回文件名稱,它將js功能「showResponse」並將圖像附加到div。這一切都很完美,但我必須將文件名寫入@Model.Photo這部分,我不知道該怎麼做。有什麼建議麼?
我想你誤解了問題。此代碼完美運行。我只需要在其中添加模型更新邏輯。從部分視圖中可以看出,它是強類型的,所以我需要將上傳文件的文件名放在@Model中,我嘗試使用ViewData和ViewBag,但沒有運氣。 – dantix
從我的理解你想要獲取服務器在你的'showResponse'方法中返回的照片文件名。我不明白你的意思是更新模型。不再有模型。您正在向服務器發送AJAX請求。 –
如果你看第一段代碼,你會看到我正在將模型傳遞給這個部分。這個模型我想更新。 – dantix