Частичный просмотр, возвращающийся как полная страница

#c# #jquery #ajax #asp.net-mvc #model-view-controller

#c# #jquery #ajax #asp.net-mvc #модель-представление-контроллер

Вопрос:

мой частичный просмотр перенаправляет меня на другую страницу.

Index.cshtml

 <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js") type="text/javascript"></script>
@using (Ajax.BeginForm("SendChat", new AjaxOptions { UpdateTargetId = "messages" }))
{
<div>
    @Html.TextBoxFor(m => m.Message.Text)
    @Html.TextBoxFor(m => m.Client.client_id, new { @Value = Model.Client.client_id, @class = "hidden" })
</div>
    <div>
        <input type="submit" value="Send message" />
    </div>
}

<div class="messages">
    @{Html.RenderPartial("~/Views/Partial/Chat.cshtml", Model.Messages);}
</div>
  

Частичный просмотр, Chat.cshtml

 @using OPP.Web.Models
@model List<OPP.Web.Models.Message>


    @for (int i = 0; i < Model.Count; i  )
    {
        Message message = Model[i];
        if (message.OwnershipId == 1)
        {
            <p style="text-align:right">
                @message.Text
            </p>
        }

        if (message.OwnershipId == 2)
        {
            <p style="text-align:left">
                @message.Text
            </p>
        }
    }
  

Мой контроллер:

 [HttpPost]
        public ActionResult SendChat(Message message, int id = 5)
        {
            WorkoutViewModel workoutViewModel = new WorkoutViewModel();
            workoutViewModel.Client = GetClient(id);
            int trainerId = workoutViewModel.Client.TrainerId ?? default(int);
            workoutViewModel.Chat = GetChat(workoutViewModel.Client.client_id, trainerId);

            message.ChatId = workoutViewModel.Chat.Id;
            if (User.IsInRole("Admin"))
                message.OwnershipId = 1;
            else if (User.IsInRole("Client"))
                message.OwnershipId = 2;
            List<Message> messages = new OPPDBContext().Messages.ToList();
            Message tmp = messages[messages.Count - 1];
            message.Order = tmp.Order   1;
            message.Id = tmp.Id   1;
            try
            {
                using (OPPDBContext context = new OPPDBContext())
                {
                    context.Messages.Add(message);
                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
                return PartialView("~/Views/Partial/Chat.cshtml", messages);
        }
  

Кажется, что у меня есть все необходимые вещи на месте. Что может быть не так? В скрипте есть зеленые волнистые строки без кода ошибки, но это почти все. Не уверен, что делать.

Комментарии:

1. проверьте, ~/Scripts/jquery.unobtrusive-ajax.min.js был ли загружен. Если он не загружен, браузер открывает partialview как полную страницу

2. как мне проверить, был ли он загружен?

3. использование инструментов разработчика вашего любимого браузера. В Chrome нажмите F12 или Ctrl Shift j и перейдите в Сеть. Убедитесь, что все файлы .js загружены

4. @MarceloVismari, на самом деле это была проблема, я не поместил такую библиотеку в свой основной макет, поэтому она дала мне полную страницу, теперь я добавил ее, и она работает нормально. Спасибо за вашу поддержку.

Ответ №1:

Я думаю, вам нужно вернуть индексный просмотр с вашего контроллера, как показано ниже:

 return View("Index", workoutViewModel);