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

通过AJAX调用修改模型属性值时遭遇404错误求助

问题分析

404错误的核心原因是请求路径与实际控制器不匹配:你的Edit链接指定控制器为AdminBlogPost,说明控制器类是AdminBlogPostController,但JS里请求的路径是/AdminBlog/List,对应AdminBlogController,路径错误导致接口找不到。此外,当前写法仅发送请求未处理返回内容,就算路径正确也无法更新表格。


修复步骤

1. 修正JS请求路径并添加回调处理

修改JS代码,将请求路径改为与控制器匹配的/AdminBlogPost/List,同时添加回调函数处理返回的HTML,替换页面上的表格:

$("#updateBtn").click(function () {
    $.post('/AdminBlogPost/List', { sampType: "goku" }, function(response) {
        $("#tableContainer").html(response);
    }).fail(function() {
        alert('更新失败,请检查请求路径');
    });
});

2. 将表格代码抽为局部视图

创建名为_BlogPostsTable.cshtml的局部视图,把表格核心代码迁移进去:

@model IEnumerable<你的命名空间.BlogPost>
<table class="table">
    <thead>
        <tr>
            <td>Id</td>
            <td>Heading</td>
            <td>Tags</td>
            <td> </td>
        </tr>
    </thead>
    <tbody>
        @foreach (var blogPost in Model)
        {
            <tr>
                <td>@blogPost.Id</td>
                <td>@blogPost.Heading</td>
                <td>
                   <div class="d-flex">
                        @foreach (var tag in blogPost.Tags)
                        {
                            <span class="badge bg-secondary me-2">@tag.Name</span>
                        }
                    </div>   
                </td>
                <td>
                    <a asp-area =""
                       asp-controller="AdminBlogPost" 
                       asp-action="Edit"
                       asp-route-id="@blogPost.Id">
                       Edit
                    </a>
                </td>
            </tr>
        }
    </tbody>
</table>

3. 修改主视图,用容器包裹局部视图

在主视图中,将原表格代码替换为局部视图,并添加容器用于后续更新:

@if(Model != null && Model.Any())
{
    <button id="updateBtn" class="btn btn-primary mb-2">Update</button>
    <div id="tableContainer">
        @await Html.PartialAsync("_BlogPostsTable", Model)
    </div>
}

4. 修改控制器POST方法,返回局部视图

将POST方法的返回类型从View改为PartialView,仅返回表格的HTML内容:

[HttpPost]
public async Task<IActionResult> List(string sampType)
{
    var blogPosts = await blogPostRepository.GetAllAsync();

    var filteredPosts = sampType == "goku" 
        ? blogPosts.Where(x => x.Heading == "Goku") 
        : blogPosts;

    return PartialView("_BlogPostsTable", filteredPosts);
}

完成上述修改后,点击Update按钮即可正确发送请求,获取过滤后的表格HTML并更新页面内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:43:13