【问题标题】:ASP.NET Core - controller will not return a viewASP.NET Core - 控制器不会返回视图
【发布时间】:2020-03-21 16:48:50
【问题描述】:

我的控制器有问题 - 它没有返回视图。我正在向同一个控制器发送一些数据,用这些数据创建一个新对象,我想将此对象发送到 Create 视图,但由于某种原因,我停留在同一页面上。

  • 查看名称:Create.cshtml
  • 控制器名称:ReservationController

这是我的控制器操作:

public IActionResult Create(int selectedTime, string selectedDate, int selectedRoomId)
{
    TimeSpan time = TimeSpan.Parse($"{selectedTime}:00:00");
    DateTime date = DateTime.ParseExact(selectedDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
    DateTime combine = date + time;

    Reservation reservation = new Reservation();
    reservation.RoomId = selectedRoomId;
    reservation.ReservationTime = combine;

    return View(reservation);
}

我的看法:

@model Escape.Models.Reservation

@{
  ViewBag.Title = "title";
}

<h2>My create reservation view</h2>

这是我来自的原始视图:

@using Escape.Controllers
@model Escape.Models.Room

@{
  ViewData["Title"] = "Details";
 }


<h4 class="title">Booking for room: @Model.Name</h4>
<div>
   <p>@Model.Description</p>
   <a class="btn btn-link" asp-action="Index">Back to all rooms</a>
   <hr />
</div>

<div>
   <input id="datepicker" type="text" name="datepicker" 
    onchange="onDateChange(@Model.Id)" />
</div>

<div>
   <div id="displayTimes"></div>
   <a id="btn-create" class="btn btn-sm"></a>
</div>

@section Scripts {
  <script>
    var dateToday = new Date();
    $(function () {
        $("#datepicker").datepicker({
            minDate: dateToday
        });
    });
  </script>
}

我的 btn-create 上的 Ajax 功能:

function onButtonClick(val, date, room) {
    var btnBack = document.getElementById("btn-create");
    btnBack.innerHTML = "Create reservation";
    $(btnBack).addClass('btn-outline-primary');

    btnBack.addEventListener("click",
        function () {
            $.ajax({
                type: "GET",
                data: { selectedTime: val, selectedDate: date, selectedRoomId: room },
                url: "/Reservation/Create",
                contentType: "application/json",
                dataType: "json"
            });
        });
}

【问题讨论】:

  • 当您说您停留在同一页面上时,您调用此方法的视图是什么?
  • 我们需要一个完全可重现的例子。我们需要查看原始视图以及您用于导航到其他视图的链接或表单等。
  • 我编辑了我的问题 - 添加了原始视图。
  • 在返回视图之前你看到了什么设置断点?

标签: asp.net-core


【解决方案1】:

如果链接&lt;a id="btn-create" class="btn btn-sm"&gt;&lt;/a&gt; 应该调用ReservationControllerCreate 方法,那么它是不完整的,您需要将其更改为:

<a asp-controller="Reservation"
   asp-action="Create"
   id="btn-create" class="btn btn-sm">Create</a>

更新:

您的点击处理程序似乎确实向控制器发送了一个请求,但在该请求之后没有任何反应,并且响应(包含来自视图的 HTML)被丢弃。

既然您想显示 HTML,也许您甚至不应该使用 AJAX,而是使用我上面的原始答案。

如果出于某种原因您需要 AJAX,那么您需要创建一个显示 HTML 的 success 处理程序:

btnBack.addEventListener("click",
    function () {
        $.ajax({
            type: "GET",
            data: { selectedTime: val, selectedDate: date, selectedRoomId: room },
            url: "/Reservation/Create",
            contentType: "application/json",
            dataType: "json",
            success: function (data) {
                // ... put processing here 
            }
        });
    }
);

【讨论】:

  • 我忘了提到我在这个按钮上有 javascript 函数,我通过 Ajax 发送数据,它的 url 指向我的 Reservation 控制器中的操作 Create。我将此功能添加到我的问题中。
猜你喜欢
  • 1970-01-01
  • 2020-01-13
  • 2022-01-10
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2020-02-18
相关资源
最近更新 更多