我有一个MVC 5 Web应用程序,其中包含一个名为CreateProposal的Razor视图,它接受一个名为ProposalViewModel的视图模型。该视图包括对名为_Proposal的部分视图的引用,该部分视图也接受视图模型。
CreateProposal 视图
@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 会列出所有附件的 a href 链接,并在每个链接旁边放置一个“删除”链接。当用户点击要删除的项目上的“删除”链接时,使用一些 JQuery 将该条目的 ID 存储在隐藏文本框中。
JQuery
$(document).on('click', '.btn.btn-danger', function () {
var id = $(this).data('id');
//alert(id);
$('#hiddenAttachmentID').val(id);
});
然后,向用户展示一个模态确认框,一旦他们确认删除,就会发出Ajax调用,该调用应该更新Partial _Proposal中的Partial _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 Controller
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.");提示。然而,与其在同一控制器内的Edit操作被调用,而非局部刷新。
[HttpPost]
public ActionResult EditProposal(ProposalViewModel model)
<div class="col-md-6" id="proposalAttachments">
。 - tcodePOST EditProposal
,那么你有一个正在提交的表单。如果你在页面上不小心点击按钮,它可能会作为默认提交。由于 AJAX GET 存在缓存问题,所以你可能无法在控制器的删除操作上触发断点,因为浏览器使用了缓存版本。你可以通过浏览器的网络监视器来验证这一点。 - Jasen