Отправьте форму, не нажимая на действие, вместо этого открыв новую страницу - PullRequest
0 голосов
/ 09 апреля 2020

К вашему сведению, я также заполняю модель поля. VdiId с частичной страницы, используя jQuery. Когда я нажимаю кнопку «Отправить» на странице формы, она перенаправляет меня на пустую страницу вместо нажатия на действие BookVdi контроллера бронирования. Я выбрасываю исключение и ставлю точки останова, которые также не выполняются.

Ниже приведен код вида:

@model HVDI.Models.BookingViewModel

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}


@using (@Html.BeginForm("BookVdi", "Booking", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    <h4>Booking</h4>
    <hr />

    <div class="form-inline">


        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.VdiId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.VdiId, new { htmlAttributes = new { @class = "form-control disabled" } })
                @Html.ValidationMessageFor(model => model.VdiId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.BookingDate, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.BookingDate, new { htmlAttributes = new { @class = "form-control datepicker" } })
                @Html.ValidationMessageFor(model => model.BookingDate, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TimeStart, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.TimeStart, new { htmlAttributes = new { @class = "form-control timepicker" } })
                @Html.ValidationMessageFor(model => model.TimeStart, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.TimeEnd, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.TimeEnd, new { htmlAttributes = new { @class = "form-control timepicker" } })
                @Html.ValidationMessageFor(model => model.TimeEnd, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="showing">
            <input type="button" class="align-content-end" onclick="" id="btnSearch" value="Search" />
        </div>

    </div>
    <br />
    <div class="form-group">
        <div class="table-dark" id="vdiSection">

        </div>
    </div>

    <br />
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Book" class="btn btn-default" />
        </div>
    </div>

}

Ниже приведен код контроллера:

public ActionResult Index()
        {
            return View();
        }


        [HttpPost]
        [ValidateAntiForgeryToken]
        public void BookVdi(BookingViewModel bookingDetails)
        {
            if (!ModelState.IsValid)
            {
                throw new Exception();
            }
                Booking newBooking = new Booking();
            newBooking.BookingDate = bookingDetails.BookingDate; //I am putting a breakpoint here
        }

Открывается пустая страница: http://localhost: 61110 / Booking / BookVdi

1 Ответ

0 голосов
/ 10 апреля 2020

Вы видите пустую страницу, потому что вы не можете ничего вернуть, если действие выполнено правильно. Пожалуйста, измените ваш код, как показано ниже.

    [HttpPost]
    [ValidateAntiForgeryToken]
    public void BookVdi(BookingViewModel bookingDetails)
    {
        if (!ModelState.IsValid)
        {
            ViewBag,Error = "Please, correct all errors.";
            return View("YOURVIEWNAMEFOR FORM");
        }
        Booking newBooking = new Booking();
        newBooking.BookingDate = bookingDetails.BookingDate; 
        // Write save code here
        return RedirectToAction("Index");  // you must redirect to something when action executed.
    }

Также добавьте этот ViewBag, чтобы увидеть ошибки при просмотре

@Html.AntiForgeryToken()
@Html.ValidationSummary()
@ViewBag.Error             // add this line
<h4>Booking</h4>

Также посмотрите на этот вопрос, если вам нужны конкретные c ошибки модели для быть показанным в поле зрения вопрос

...