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

ASP.NET Core中jQuery调用局部视图Action未命中断点的问题解决

问题:第二个AJAX请求无法触发Action方法断点

在实现评论提交后更新局部视图的功能时,第一个提交评论的AJAX请求能正常调用PostComment Action并命中断点,但后续调用LoadPartialView函数发起的AJAX请求始终无法触发UpdateCommentsPartial Action的断点,且返回415(不支持的媒体类型)状态码。

视图代码(DetailsView)

<form method="post">
    <div id="haveToReloaddiv" class="entriesContainer">
        @* 想用创建的局部视图更新这个div *@
    </div><!--End  entries container -->
</form>  

<div class="replyForm">
    <form id="formPostComment" method="post" asp-action="PostComment" asp-controller="BlogData">
        <div class="row">
            <div class="col-md-6">
                <input type="text" placeholder="姓名 *" id="name">
            </div>
            <div class="col-md-6">
                <input type="email" placeholder="邮箱 *" id="email">
            </div>
        </div>

        <textarea placeholder="留言 *" id="message" cols="45" rows="10"></textarea>

        <submit id="btnPostComment" class="btn btn-main m-bottom-40">提交评论</submit>
    </form>
</div>

@section Scripts{
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.min.js"></script>
    <script src="~/js/jquery.min.js"></script>
    <script src="~/bootstrap/js/bootstrap.min.js"></script>

    <script>
        $(function () {
            $("#btnPostComment").click(function () {
                var url = $("#formPostComment").attr("action");
                var formData = new FormData();
                formData.append("Name", $("#name").val());
                formData.append("Email", $("#email").val());
                formData.append("Comment", $("#message").val());
                formData.append("BlogId",@Model.Id);

                $.ajax({
                    type: 'POST',
                    url: url,
                    data: formData,
                    processData: false,
                    contentType: false,
                    success: function (response) {
                        //alert(response.name);
                        LoadPartialView(response);
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    },
                    error: function (response) {
                        alert(response.responseText);
                    }
                });
            });
        });

        function LoadPartialView(responseModelData) {
            $.ajax({
                type: 'POST',
                url: "/BlogData/UpdateCommentsPartial",
                data: { "responseModel": responseModelData },
                success: function (response) {
                    $("#haveToReloaddiv").html(response);
                }
            })
        }
    </script>
}

控制器代码

[HttpPost]
public async Task<JsonResult> PostComment([Bind("Name,Email,Comment,BlogId")] BlogComments blogComment)
{
    if (ModelState.IsValid)
    {
        var blog = _context.BlogPosts.Include(b => b.BlogComments).FirstOrDefault(x => x.Id == blogComment.BlogId);
        blogComment.PostedDateTime = DateTime.Now;
        blog.BlogComments.Add(blogComment);
        await _context.SaveChangesAsync();
    }

    ResponseModel model = new ResponseModel()
    {
        Status = "Success",
        Id = blogComment.Id,
        Comments = blogComment.Comment,
        Name = blogComment.Name,
    };

    return Json(model);
}

[HttpPost]
public PartialViewResult UpdateCommentsPartial([FromBody]ResponseModel responseModel)
{
    // 从未命中此处的断点
    var blog = _context.BlogPosts.FirstOrDefault(x => x.Id == responseModel.Id);
    return PartialView("_UpdateCommensPartial", blog.BlogComments);
}

补充说明

ResponseModel类

public class ResponseModel
{
    public string Status { get; set; }
    public int Id { get; set; }
    public string Comments { get; set; }
    public string Name { get; set; }
}

额外现象

  • 在LoadPartialView函数中,只能通过responseModelData.name(小写n)获取到姓名值,使用responseModelData.Name会返回Undefined,说明JSON序列化后属性名变为小写。
  • 查看Network标签,请求URL正确,但返回状态码为415(不支持的媒体类型)。

解决方法

将UpdateCommentsPartial方法参数上的[FromBody]特性改为[FromForm]后,断点成功触发,请求正常处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:06