ASP NET MVC CORE - обновлять частичное представление каждые X секунд - PullRequest
0 голосов
/ 16 июня 2019

Я хотел бы создать вид с 2 частичными видами: первый - это весь разговор, а второй - форма, позволяющая отправить новое сообщение

первое представление должно обновляться каждые X секунд (скажем, 5 секунд), но в это время пользователь должен написать сообщение в

В контроллере (сообщения) у меня есть следующие методы:

   [HttpGet]
        public ViewResult Index()
        {
            var vm = _manager.GetAllConversations();
            return View(vm);
        }


        [HttpGet]
        public ViewResult Details(int speakerId)
        {
            _speakerId = speakerId;
            var vm = _manager.GetConversation(_speakerId);

            return View(vm);
        }


        [HttpPost]
    public IActionResult SendMessage(SendMessageViewModel vm)
    {
        _manager.SendMessage(vm.SpeakerId, vm.Content);
        return RedirectToAction("Details", vm.SpeakerId);
    }

и у меня есть следующие представления Подробности:

<div class="col-md-6" id="conversationDiv">
    <script type="text/javascript">
        setInterval("$('#conversationDiv').load('Messages/Details/1')", 2000);
    </script>


    @foreach (var speak in Model)
    {

                <div>@speak.SendDate @speak.SenderName</div>
                <div>@speak.Message</div>
                <hr />
    }

</div>

<div>
    @{
        await Html.RenderPartialAsync("SendMessage",
            new RandevouMVC.ViewModels.Messages.SendMessageViewModel());
    }
</div>

и частичное представление SendMessage:

<form asp-controller="Messages" asp-action="SendMessage" method="post">

    <textarea asp-for="Content" class="form-control" rows="4" placeholder="message content...">
    </textarea>
    <button type="submit" class="btn btn-primary">Send</button>
</form>

но скрипт обновления JQuery не работает ...

в Shared / _Layout.cshtml у меня есть:

 <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>

но jquery пытается загрузить не

localhost:port/messages/details/1

но:

localhost:port/messages/details/1/~/messages/details/1

1 Ответ

1 голос
/ 16 июня 2019

измените

setInterval("$('#conversationDiv').load('Messages/Details/1')", 2000);

на

setInterval("$('#conversationDiv').load('/Messages/Details/1')", 2000);

с косой чертой впереди, чтобы убедиться, что URL загружен из корня сайта.

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