C# 调用控制器中的Action方法on Ajax success函数以呈现局部视图

C# 调用控制器中的Action方法on Ajax success函数以呈现局部视图,c#,jquery,ajax,asp.net-mvc,razor,C#,Jquery,Ajax,Asp.net Mvc,Razor,我试图调用控制器操作方法来呈现部分视图,以更新大网页的部分。我试图在Ajax成功函数上实现这一点。 代码控制流: jqueryajax调用webapi向数据库添加内容,在Ajax调用的success函数上,我调用返回部分视图的控制器操作方法 Jquery脚本 $(document).ready(function () { $("#sendMessage").on("click", function (e) { e.preventDefau

我试图调用控制器操作方法来呈现部分视图,以更新大网页的部分。我试图在Ajax成功函数上实现这一点。 代码控制流: jqueryajax调用webapi向数据库添加内容,在Ajax调用的success函数上,我调用返回部分视图的控制器操作方法

Jquery脚本

 $(document).ready(function () {
            $("#sendMessage").on("click", function (e) {
                e.preventDefault();
                var MessageReplyParam = $('#messageToBeSent').val();
                var FromUserNameParam = $('#FromUserName').val();
                var FromUserIDParam = $('#FromUserID').val();
                var ToUserNameParam = $('#ToUserName').val();
                var ToUserIDParam = $('#ToUserID').val();
                var button = $(this);
                $.ajax({
                    //url: "/api/messages/SendMessages?MessageID=" + button.attr("data-message-id"),
                    url: "/api/messages/SendMessages",
                    method: "POST",
                    data: {
                        lngMessageID: button.data("message-id"),
                        Reply: MessageReplyParam,
                        FromUserID: FromUserIDParam,
                        FromUserName: FromUserNameParam,
                        ToUserID: ToUserIDParam,
                        ToUserName: ToUserNameParam
                    },
                    dataType: 'html',
                    success: function (data) {
                        $.ajax({
                            url: "/Booking/SendMessagesTest",
                            method: "POST",
                            data:
                            {
                                MessageID:2
                            }
                        });
                    }
                });
            });
        });
用于更新局部视图的控制器方法

    public ActionResult SendMessagesTest(int? MessageID)
        {          

            var messagesReplies = from mrp in _context.MessageReply
                                  where mrp.lngMessageID == MessageID
                                  select mrp;

            List<MessageReply> MessageReplies = new List<MessageReply>();
            MessageReplies = messagesReplies.ToList();

            BookingViewModel bvm = new BookingViewModel();

            bvm.MessageReplies = MessageReplies;

            return PartialView("_MessagesView", bvm);

        }
public ActionResult sendmagestest(int?MessageID)
{          
var messagesReplies=来自_context.MessageReply中的mrp
其中mrp.lngMessageID==MessageID
选择mrp;
List MessageReplies=新建列表();
MessageReplies=messagesReplies.ToList();
BookingViewModel bvm=新建BookingViewModel();
bvm.MessageReplies=MessageReplies;
返回部分视图(“消息视图”,bvm);
}
_MessagesView.cshtml

@model DatabaseMVCPractice.ViewModels.BookingViewModel
 @if (Model.MessageReplies != null)
        {
            foreach (var msg in Model.MessageReplies)
            {
                <p class="chatMessage">@msg.FromUserName: @msg.Reply</p>
            }
        }      
@model databasemvcpracice.ViewModels.BookingViewModel
@if(Model.messagereplays!=null)
{
foreach(Model.messagereplays中的var msg)
{

@msg.FromUserName:@msg.Reply

} }
包含其他html的主视图,还呈现_MessageView的部分视图

  <div id="partial">
            <div class="messages">
                <div class="bg-dark rounded padding-x4">
                    @{
                        Html.RenderPartial("_MessagesView", Model);
                    }
                </div>
                    <p>@Html.DisplayFor(model => model.Messages.Message)</p>
            </div>
         </div>

@{
Html.RenderPartial(“_MessagesView”,Model);
}
@DisplayFor(model=>model.Messages.Message)


当我调试代码时,控制流正常工作,最后,它转到_MessageView,但从未转到MainView来呈现Ajax成功函数的部分视图。我做错了什么?

您正在返回部分视图
返回部分视图(“\u MessagesView”,bvm)
ajax
部分视图只返回其中包含的部分,而不是主视图,如果您的需求是从ajax渲染部分视图,那么您可以在ajax成功中获得部分视图响应,并用部分响应替换
main
视图div

控制器操作
sendmagestest(int?MessageID)
在ajax响应中返回部分视图字符串

下面是您的
主视图

<div id="partial">
            <div class="messages">
                <div id="divMessages" class="bg-dark rounded padding-x4">
                    @{
                        Html.RenderPartial("_MessagesView", Model);
                    }
                </div>
                    <p>@Html.DisplayFor(model => model.Messages.Message)</p>
            </div>
         </div>

如果您需要更多信息,我希望它能帮助您让我知道。

我想说没有错,但是您没有捕获从
ajax
请求返回的结果(在您的情况下,它是
success
方法)。因此,将
success
选项添加到您的
partial view
ajax请求中,然后获取响应并将其呈现在
div
中,您希望部分视图显示为:
success:function(response){if(response!=null)$('.html(response)}
。感谢您的帮助!我让它工作了,当有人收到新消息时,如果数据库中的某些内容发生变化,是否有一种方法可以自动更新局部视图?如果您的要求是在数据库发生变化时更新前端,那么
signar
is可以帮助您更新真实的web。你可以参考
$(document).ready(function () {
        $("#sendMessage").on("click", function (e) {
            e.preventDefault();
            var MessageReplyParam = $('#messageToBeSent').val();
            var FromUserNameParam = $('#FromUserName').val();
            var FromUserIDParam = $('#FromUserID').val();
            var ToUserNameParam = $('#ToUserName').val();
            var ToUserIDParam = $('#ToUserID').val();
            var button = $(this);
            $.ajax({
                //url: "/api/messages/SendMessages?MessageID=" + button.attr("data-message-id"),
                url: "/api/messages/SendMessages",
                method: "POST",
                data: {
                    lngMessageID: button.data("message-id"),
                    Reply: MessageReplyParam,
                    FromUserID: FromUserIDParam,
                    FromUserName: FromUserNameParam,
                    ToUserID: ToUserIDParam,
                    ToUserName: ToUserNameParam
                },
                dataType: 'html',
                success: function (data) {
                    $.ajax({
                        url: "/Booking/SendMessagesTest",
                        method: "POST",
                        data:
                        {
                            MessageID: 2
                        },
                        success: function (response) {
                            $("#divMessages").html("");
                            $("#divMessages").html(response);
                        }
                    });
                }
            });
        });
    });