Функция обратного вызова для обновления части страницы, которая получает данные из базы данных обратного вызова MVC / Ajax - PullRequest
0 голосов
/ 15 мая 2019

У меня есть система обмена сообщениями в представлении MVC, которая получает все данные из модели. В этом представлении у меня есть вызов ajax для веб-API, который обновляет базу данных, когда кто-то отправляет ответ или новое сообщение. Мне бы хотелось, чтобы была запущена функция обратного вызова, чтобы она обновляла часть экрана, которая показывает все сообщения чата из системы обмена сообщениями.

Jquery Ajax call

   <script>
        $(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) {
                        $('#partial').html(data);
                    }
                });      
             });
        });

    </script>

Веб-API

 public HttpResponseMessage SendMessages([FromBody]MessageReply message)
        {
            //Add a message to MessageReply table
            dynamic model = new { Name = "" };
            _context.MessageReply.Add(message);
            _context.SaveChanges();

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

            List<MessageReply> MessageReplies = new List<MessageReply>();
            MessageReplies = messagesReplies.ToList();
            var response = new HttpResponseMessage();
            response.Content = new StringContent(@"<div class='messages'><div class='bg-dark rounded padding-x4'>
                                                  <span>test</span></div></div>");


            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
            return response;

        }

Контроллер

   public ActionResult BookingInfo(BookingViewModel bvm, int? BookingId)
        {

            //This class will be used from All Bookings Link by passing in BookingID

            //Get the data from bookingID and show the booking details with messages
            //and option to send message
            BookingViewModel bvl = new BookingViewModel();

            if (Request.IsAjaxRequest())
            {
                return PartialView("_MessagesView", bvl.MessageReplies);
            }

            var BookingInformation = from booking in _context.Booking
                                     join pets in _context.PetInformation
                                     on booking.BookingID equals pets.lngBookingID
                                     join customer in _context.Customers
                                     on booking.ServiceProviderID equals customer.strUserID
                                     join requester in _context.Customers
                                     on booking.strUserID  equals requester.strUserID
                                     join msg in _context.Messages
                                     on booking.BookingID equals msg.lngBookingID into mt
                                     from submsg in mt.DefaultIfEmpty()
                                     where booking.BookingID == BookingId
                                     select new { bk = booking, pt = pets,cst = customer, req = requester,mst = submsg};

            //Get Message Replies


            int messageId = 0;

            foreach (var bi in BookingInformation)
            {              
                bvl.Booking = bi.bk;
                bvl.Pets = bi.pt;
                bvl.ServiceProvider = bi.cst;
                bvl.ServiceProviderName = bi.cst.Name;
                bvl.RequesterName = bi.req.Name;
                bvl.Booking.strUserID = bi.bk.strUserID;
                bvl.Booking.ServiceProviderID = bi.bk.ServiceProviderID;
                messageId = bi.mst.MessageID;
                bvl.Messages = bi.mst;
            }

            if (bvl.Booking.ServiceProviderID == User.Identity.GetUserId())
            {
                bvl.FromUserID = bvl.Booking.ServiceProviderID;
                bvl.ToUserID = bvl.Booking.strUserID;
                bvl.FromUserName = bvl.ServiceProviderName;
                bvl.ToUserName = bvl.RequesterName;
            }
            else
            {
                bvl.FromUserID = bvl.Booking.strUserID;
                bvl.ToUserID = bvl.Booking.ServiceProviderID;
                bvl.FromUserName = bvl.RequesterName;
                bvl.ToUserName = bvl.ServiceProviderName;
            }

            var  MessageReplies = from msg in _context.MessageReply
                                  where msg.lngMessageID == messageId
                                  select msg;

            if (MessageReplies.Count() > 0)
            {
                bvl.MessageReplies = MessageReplies.ToList();
            }

            return View("RequestBooking", bvl);
        }

View

 <div id="partial">

            @{
                Html.RenderPartial("_MessagesView",Model);
            }
        </div>

Я бы хотел, чтобы сообщения Div загружались снова с новыми сообщениями, как только мы получим успех от обратного вызова jquery. Это возможно? Должен ли я написать свой HTML в своем веб-API для работы со списком и создания HTML из этого? Это будет грязное решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...