我有一个MVC 5 Web应用程序,其中包含一个名为 CreateProposal 的Razor View,它接受一个名为ProposalViewModel的ViewModel。此视图包含对名为 _Proposal 的部分视图的引用,该部分视图也接受ViewModel。
CreateProposal View
@model STAR.UI.ViewModels.ProposalViewModel
<div class="row">
@Html.Partial("_Proposal", Model)
</div>
部分视图 _Proposal 还引用另一个名为 _ExistingAttachments 的部分视图,它也接受ViewModel。
_Proposal Partial
@model STAR.UI.ViewModels.ProposalViewModel
<div class="col-md-6" id="proposalAttachments">
@Html.Partial("_ExistingAttachments", Model)
</div>
_ExistingAttachments Partial
@model STAR.UI.ViewModels.ProposalViewModel
<div class="form-group">
<label>Existing Attachments</label><br />
@Html.Hidden("hiddenAttachmentID", "", new { @id = "hiddenAttachmentID" })
@if (Model.Attachments != null)
{
foreach (var upload in Model.Attachments)
{
<a href="~/Content/uploads/@upload.fileName">@upload.fileName</a>
<a href="#" class="btn btn-danger btn-xs" data-toggle="modal" data-target="#ModalDeleteAttachment" data-id="@upload.fileID">Remove</a><br />
}
}
</div>
_ExistingAttachments Partial吐出一个href链接列表和每个旁边的Remove链接。一旦用户单击要删除的项目上的删除链接,该条目的ID就会使用一些JQuery存储在隐藏文本框中。
JQuery
$(document).on('click', '.btn.btn-danger', function () {
var id = $(this).data('id');
//alert(id);
$('#hiddenAttachmentID').val(id);
});
然后会向用户显示模态确认框,一旦确认删除,就会进行Ajax调用,然后更新部分 _Proposal >中的部分 _ExistingAttachments 强>
$.ajax({
type: "GET",
url: '/Proposal/DeleteAttachment/',
data: { id: $("#hiddenAttachmentID").val() },
error: function () {
alert("An error occurred.");
},
success: function (data) {
alert("Worked.");
$("#proposalAttachments").html(data);
}
});
MVC控制器
public ActionResult DeleteAttachment(int id)
{
//Delete entry using passed in id
ProposalViewModel model = new ProposalViewModel();
//Code to populate ViewModel
return PartialView("_ExistingAttachments", model);
}
一切正常,直到我希望刷新部分视图 _ExistingAttachments ,但这不会发生。
为长期问题道歉,但希望能发现我做错了什么。
请帮忙。
更新
我应该补充一下,代码使它成为Ajax Success函数和alert(“Worked。”);叫做。但是,代替部分刷新,我在同一个Controller中的编辑操作被称为
[HttpPost]
public ActionResult EditProposal(ProposalViewModel model)
答案 0 :(得分:1)
罪魁祸首实际上是我的模态中的确认按钮。这是
<input type="submit" id="mySubmitDeleteAttachment" class="btn btn-primary" value="Yes, please delete" />
这导致应用程序在Ajax调用后执行POST。所以我转而改为
<button type="button" id="mySubmitDeleteAttachment" class="btn btn-default">Yes, please delete</button>
现在一切都按预期工作了。
答案 1 :(得分:0)
似乎所有标记和代码块都很好。可能是你的ajax get请求被缓存了
尝试将cache:false
添加到您的ajax调用
$.ajax({
type: "GET",
url: '/Proposal/DeleteAttachment/',
cache: false,
data: { id: $("#hiddenAttachmentID").val() },
error: function () {
alert("An error occurred.");
},
success: function (data) {
console.log("Worked.");
$("#proposalAttachments").html(data);
}
});