ajax - 从 UploadFile 和 ajax 发布后刷新 PartialView
问题描述
上传文件后如何刷新部分视图?
我的部分观点:
<form id="form" name="form" action="/uploader" enctype="multipart/form-data" method="post">
<input id="files" name="files" type="file" size="1" multiple onchange="uploadFiles('files');" />
<table>
<tr>
@foreach (var item in Model.Vehicules.ImageVehicules)
{
<td>
<img id="img_1" src="~/Fichiers/@item.ImageAnnonceUrl" style="height:100px" />
</td>
}
</tr>
</table>
</form>
我的 ajax 调用:
<script>
function uploadFiles(inputId) {
var input = document.getElementById(inputId);
var files = input.files;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("p_files", files[i]);
}
formData.append("p_id", @Model.Vehicules.VehiculeId);
var _url = '@Url.Action("Edit", "Annonces")';
$.ajax(
{
url: _url,
data: formData,
processData: false,
contentType: false,
type: "POST",
success: function (data) {
alert("Files Uploaded!");
}
}
);
}
</script>
我在 Controller 中的方法:
[HttpPost]
public async Task<IActionResult> Edit(IList<IFormFile> p_files, int p_id)
{
IList<IFormFile> files = p_files;
if (Request.Form.Files.Count > 0)
{
for (int i = 0; i < files.Count; i++)
{
IFormFile file = files[i];
var filePath = _env.WebRootPath + @"\Fichiers\" + file.FileName;
using (var stream = new FileStream(filePath, FileMode.Create))
await file.CopyToAsync(stream);
ImageVehicules img = new ImageVehicules();
img.ImageAnnonceUrl = file.FileName;
img.VehiculeId = p_id;
M_ImageVehicules.Insert(img);
}
ModelState.Clear();
var annonce = await M_VM_Annonces.Charger_Annonces_By_Id(p_id);
return PartialView("_Images1", annonce);
}
return PartialView();
}
上传工作正常,但视图没有更新。我的模型已更新。我必须按 F5 才能有图片。
我补充ModelState.Clear();
说,但这不起作用。
你有想法吗?
解决方案
解决了。我添加了一个 div 来包含包含图片的表单:
<div id="Liste_images">
<form id="form" name="form" action="/uploader" enctype="multipart/form-data" method="post">
<div class="buttons">
<div class="upload-button">
<div class="label">Click me!</div>
<input id="files" name="files" type="file" size="1" multiple onchange="uploadFiles('files');" />
<br />
<table>
<tr>
@foreach (var item in Model.Vehicules.ImageVehicules)
{
<td>
<img id="img_1" src="~/Fichiers/@item.ImageAnnonceUrl" style="height:100px" />
</td>
}
</tr>
</table>
</div>
</div>
</form>
</div>
并修改 ajax 的成功如下 $("#Liste_images").html(data);
$.ajax(
{
url: _url,
data: formData,
processData: false,
contentType: false,
type: "POST",
success: function (data) {
$("#Liste_images").html(data);
}
}
);
推荐阅读
- elasticsearch - 拒绝为具有文本/关键字数据类型的字段编制索引的数值 (ElaticSearch 6.2.3)
- google-cloud-firestore - firestore verifyId 令牌
- io - 压缩是线性操作吗?
- unity3d - 碰撞编号 2 处的错误标签
- c++ - 在声明它的类之外定义一个类 C++
- python - 谁能解释这个“最大子阵列”问题?
- java - 在 printf() 或 format() 中添加新行
- http - IIS - 接受一个 HTTP GET,然后等待,触发 POST 到 API,等待 POST 200 OK 回复 REDIRECT 到原始 HTTP GET
- java - 如何使用 postgres db 和 java 创建 Mock 数据库并在 mock db 中添加数据以进行集成测试
- amazon-web-services - 有没有办法使用 AWS Amplify DataStore @searchable 指令降低成本?