Как заполнить MVC DropDownList на основе значения 2 EditorFors - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над Системой управления отелем для моего школьного проекта в моем ASP. NET классе.

В моей панели администратора я реализую возможность создания нового бронирования; отделить от ранее существовавшего набора форм стороны publi c.

В форме у меня есть несколько полей, включая поля для дат заезда и выезда и DropDownList для типов номеров. Идея формы заключается в том, что система автоматически выбирает свободную комнату на основе критериев (например, 2 двуспальные кровати предоставляются с 18 по 22 мая).

Я бы хотел, чтобы DropDownList автоматически настраивался на доступные типы номеров на основе двух дат; поэтому в DropDownList отображаются только типы комнат, которые доступны в этот период времени.

Из небольшого чтения, которое я делал, я обнаружил, что AJAX и JQuery могут выполнить sh эта задача. Однако я не очень хорошо разбираюсь в JQuery, так как мои Javascript классы были чрезвычайно просты и не делали ничего, кроме доступа к документу и чтения файла XML.

Я мог бы просто создайте одну форму, которая принимает даты, затем передает ее в модель другого действия, где я могу затем использовать эти даты в запросе, но я надеялся избежать любых огромных комбинаций форм.

Не могли бы вы, ребята, указать я в правильном направлении по этому вопросу?

Вот моя текущая форма:

@model ReserveIt.Models.Reservation

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_AdminMasterLayout.cshtml";
}

<script type="text/javascript">

</script>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Reservation</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.RoomID)

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

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

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

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

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

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

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

<script src="~/Scripts/jquery-3.4.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

Вот мой класс сущностей:

public partial class Reservation
    {
        public int ReservationID { get; set; }
        public Nullable<int> UserID { get; set; }
        public Nullable<int> RoomID { get; set; }
        public System.DateTime CheckIn { get; set; }
        public Nullable<int> StayLength { get; set; }
        public System.DateTime CheckOut { get; set; }
        public Nullable<decimal> NightlyRate { get; set; }

        public virtual Room Room { get; set; }
        public virtual User User { get; set; }
    }

Вот метаданные I использовать с моим классом Entity:

public class ReservationMetadata
    {
        public int ReservationID { get; set; }
        public Nullable<int> UserID { get; set; }
        public Nullable<int> RoomID { get; set; }

        [Required(ErrorMessage = "Please specify a check in date")]
        [Display(Name = "Check In Date")]
        [DataType(DataType.Date)]
        public System.DateTime CheckIn { get; set; }

        [Display(Name = "Length of Stay")]
        public Nullable<int> StayLength { get; set; }

        [Required(ErrorMessage = "Please specify a check out date")]
        [Display(Name = "Check Out Date")]
        [DataType(DataType.Date)]
        public System.DateTime CheckOut { get; set; }

        [Display(Name = "Nightly Rate")]
        [DataType(DataType.Currency)]
        public Nullable<decimal> NightlyRate { get; set; }
    }
...