C# 调用控制器中的Action方法on Ajax success函数以呈现局部视图
我试图调用控制器操作方法来呈现部分视图,以更新大网页的部分。我试图在Ajax成功函数上实现这一点。 代码控制流: jqueryajax调用webapi向数据库添加内容,在Ajax调用的success函数上,我调用返回部分视图的控制器操作方法 Jquery脚本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
$(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);
}
});
}
});
});
});