使用 MVC Ajax 更新局部视图内的局部视图

2023-12-28

我有一个 MVC 5 Web 应用程序,其中包含一个名为的 Razor 视图创建提案它接受一个名为 ProposalViewModel 的 ViewModel。该视图包括对名为的部分视图的引用_提议它也接受 ViewModel。

创建提案视图

@model STAR.UI.ViewModels.ProposalViewModel

<div class="row">
    @Html.Partial("_Proposal", Model)
</div>

片面观点_提议还引用了另一个名为的局部视图_现有附件它也接受 ViewModel。

_提案部分

@model STAR.UI.ViewModels.ProposalViewModel

<div class="col-md-6" id="proposalAttachments">
     @Html.Partial("_ExistingAttachments", Model)
</div>

_现有附件部分

@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 链接列表以及每个链接旁边的“删除”链接。一旦用户单击他们想要删除的项目上的删除链接,该条目的 ID 就会使用一些 JQuery 存储在隐藏的文本框中。

JQuery

$(document).on('click', '.btn.btn-danger', function () {
        var id = $(this).data('id');
        //alert(id);
        $('#hiddenAttachmentID').val(id);

    });

然后会向用户显示一个模式确认框,一旦他们确认删除,就会进行 Ajax 调用,然后更新 Partial_现有附件部分内_提议

$.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);
}

一切正常,直到我期待部分视图_现有附件刷新,但这不会发生。

对于这个长问题表示歉意,但希望能发现我做错了什么。

请帮忙。

UPDATE

我应该补充一点,代码使其成为 Ajax Success 函数和alert("Worked.");叫做。但是,我在同一控制器中的编辑操作被称为而不是部分刷新

[HttpPost]
public ActionResult EditProposal(ProposalViewModel model)

各位,在杰森的帮助下终于解决了。 Ajax 调用完成后,代码重定向到另一个页面。显然我不希望这种情况发生,因为我只是希望部分视图在我的页面上更新,但随后保留在页面上。

罪魁祸首实际上是我模态中的确认按钮。它是

<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>

现在一切都按预期进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVC Ajax 更新局部视图内的局部视图 的相关文章

随机推荐