You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Razor Pages:OnPostAsync成功后刷新另一页面的PartialView

实现Product页面中_ProductAliasList组件的局部刷新

要实现弹窗提交别名修改后,刷新父页面的PartialView组件,需要结合后端状态返回和前端AJAX请求完成,具体步骤如下:

1. 修改Edit页面的后端OnPostAsync方法

将原有页面返回改为JSON结果,告知前端提交状态及必要参数:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Json(new { success = false, message = "数据验证失败" });
    }

    _context.Attach(ProductAlias).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!ProductAliasExists(ProductAlias.ProductAliasId))
        {
            return Json(new { success = false, message = "该产品别名不存在" });
        }
        else
        {
            throw;
        }
    }

    // 返回成功状态及关联产品ID,用于后续刷新组件
    return Json(new { success = true, productId = ProductAlias.ProductId });
}

2. 为Edit页面的表单添加AJAX提交逻辑

阻止表单默认提交行为,通过AJAX提交数据,成功后刷新父页面组件:
首先给表单添加ID标识:

<form id="edit-alias-form" method="post">
    <!-- 原有表单内容 -->
    <button type="submit">保存修改</button>
</form>

然后添加JavaScript处理提交:

document.getElementById('edit-alias-form').addEventListener('submit', async function(e) {
    e.preventDefault();
    
    const formData = new FormData(this);
    const token = document.querySelector('input[name="__RequestVerificationToken"]').value;
    
    const response = await fetch(this.action, {
        method: 'POST',
        body: formData,
        headers: {
            'RequestVerificationToken': token
        }
    });

    const result = await response.json();
    if (result.success) {
        // 关闭弹窗(根据你使用的弹窗框架调整,比如Bootstrap模态框:$('#modal-id').modal('hide'))
        // 刷新父页面的别名列表容器
        const parentContainer = window.parent.document.getElementById('product-aliases-container');
        // 请求Product页面的Handler获取最新Partial内容
        const partialResp = await fetch(`/Product/${result.productId}?handler=ProductAliasList`);
        const partialHtml = await partialResp.text();
        parentContainer.innerHTML = partialHtml;
    } else {
        alert(result.message);
    }
});

3. 在Product页面添加获取Partial的Handler

在Product.cshtml的后台代码中,新增Handler用于单独返回_ProductAliasList的内容:

public async Task<IActionResult> OnGetProductAliasList(int id)
{
    // 根据产品ID查询最新的别名列表
    var product = await _context.Products
        .Include(p => p.ProductAliases)
        .FirstOrDefaultAsync(p => p.ProductId == id);
    
    return PartialAsync("~/Pages/Product/_ProductAliasList.cshtml", product.ProductAliases);
}

完成以上步骤后,当别名修改提交成功,前端会自动请求最新的别名列表Partial内容,替换到父页面的容器中,实现局部刷新,无需重载整个页面。

内容的提问来源于stack exchange,提问作者s15199d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:50:23