I have a messaging system inside a view of MVC that gets all the data from model. I have a ajax call in that view to a Web API that updates the database when somebody sends a reply or new message. I would like callback function to run so it updates the part of the screen that shows all chat messages from messaging system.
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>
Web 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;
        }
Controller
   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>
I would like that Div messages to load again with new messages once we get success from jquery callback. Is that possible? Do I have to write my HTML in my Web API to run through list and create HTML out of that? That will be a messy solution
