繁体   English   中英

使用MVC Ajax在部分视图中更新部分视图

[英]Update Partial View Within Partial View Using MVC Ajax

我有一个MVC 5 Web应用程序,它包含一个名为CreateProposal的Razor View,它接受一个名为ProposalViewModel的ViewModel。 此视图包含对名为_Proposal的部分视图的引用,该部分视图也接受ViewModel。

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吐出一个href链接列表和每个旁边的Remove链接。 一旦用户单击要删除的项目上的删除链接,该条目的ID就会使用一些JQuery存储在隐藏文本框中。

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控制器

public ActionResult DeleteAttachment(int id)
{
    //Delete entry using passed in id
    ProposalViewModel model = new ProposalViewModel();
    //Code to populate ViewModel
    return PartialView("_ExistingAttachments", model);
}

一切正常,直到我期望刷新Partial View _ExistingAttachments ,但这不会发生。

为长期问题道歉,但希望能发现我做错了什么。

请帮忙。

UPDATE

我应该补充一下,代码使它成为Ajax Success函数和alert(“Worked。”); 叫做。 但是,不是部分刷新,而是调用同一个Controller中的编辑操作

[HttpPost]
public ActionResult EditProposal(ProposalViewModel model)

感谢Jasen的帮助,人们终于解决了问题。 在我的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>

现在一切都按预期工作了。

似乎所有标记和代码块都很好。 可能是你的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);
        }

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM