C#. NET функция проверки не влияет на оба поля ввода - PullRequest
2 голосов
/ 18 января 2020

Итак, я сейчас работаю над школьным проектом, для которого вы должны подать заявку на питание. У еды есть 3 блюда, закуска, основное и десертное; из которых стартер и десерт не являются обязательными, но один должен быть выбран. Я написал эту функцию, чтобы проверить, если один равен 0, а другой заполнен выбранным объектом (StarterCourse & DessertCourse являются целыми числами):

public JsonResult CheckDessertCourse(MealCourse mealCourse)
    {
        if(mealCourse.StarterCourse == 0 && mealCourse.DessertCourse > 0)
        {
            return Json(true);
        }
        else if(mealCourse.StarterCourse > 0 && mealCourse.DessertCourse == 0)
        {
            return Json(true);
        }
        else
        {
            return Json(false);
        }
    }

Вот как выглядит моя модель:

namespace EasyMeal.Models
{
    public class MealCourse
    {
        [Required]
        public int MealID { get; set; }
        [Required(ErrorMessage = "Please enter a date for this meal")]
        [Remote(action: "ValidateDate", controller: "Meals")]
        [UIHint("Date")]
        public DateTime Date { get; set; }
        [Required(ErrorMessage = "Please enter the price for this meal")]
        [Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")] 
        public double Price { get; set; }
        [Remote(action: "CheckDessertCourse", controller: "Meals")]
        public int StarterCourse { get; set; }
        [Required(ErrorMessage = "Please choose a main dish for this meal")]
        public int MainCourse { get; set; }
        [Remote(action: "CheckDessertCourse", controller: "Meals")]
        public int DessertCourse { get; set; }
        public IList<Course> Courses { get; set; }
    }
}

Мое мнение:

@model MealCourse
@using EasyMeal.Models.Logic

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

<h1>Create new meal</h1>
<div style="float: right; margin-top: -45px;">
    <a class="btn btn-danger pull-right" asp-controller="Meals" asp-action="Index">Cancel</a>
</div>
<hr />

<div class="row">
    <div class="col-md-6">
        <form asp-action="Create" method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <span asp-validation-for="Date" class="text-danger"></span> <br />
                <label asp-for="Date" class="control-label"></label>
                <input asp-for="Date" data-val="true" data-val-required="The date field is required." class="form-control" />
            </div>
            <div class="form-group">
                <span asp-validation-for="Price" class="text-danger"></span><br />
                <label asp-for="Price" class="control-label"></label>
                <input asp-for="Price" class="form-control" />
            </div>
            <div class="form-group">
                <span asp-validation-for="StarterCourse" class="text-danger"></span>
                <label class="control-label" asp-for="StarterCourse">Starter:</label>
                <select class="form-control" asp-for="StarterCourse" data-val="true">
                    <option value=0>Choose an option</option>
                    @foreach (var c in Model.Courses)
                    {
                        if (c.CourseType == "Starter" && c.Date <= GetDates.GetNextWeeksSunday() && c.Date >= GetDates.GetNextMonday())
                        {
                            <option value="@c.CourseID">@c.Name</option>
                        }
                    }
                </select>
            </div>
            <div class="form-group">
                <label class="control-label" asp-for="MainCourse">Main Course:</label>
                <select class="form-control" asp-for="MainCourse">
                    <option value="">Choose an option</option>
                    @foreach (var c in Model.Courses)
                    {
                        if (c.CourseType == "Main" && c.Date <= GetDates.GetNextWeeksSunday() && c.Date >= GetDates.GetNextMonday())
                        {
                            <option value="@c.CourseID">@c.Name</option>
                        }
                    }
                </select>
            </div>
            <div class="form-group">
                <span asp-validation-for="DessertCourse" class="text-danger"></span>
                <label class="control-label" asp-for="DessertCourse">Dessert:</label>
                <select class="form-control" asp-for="DessertCourse" data-val="true">
                    <option value=0>Choose an option</option>
                    @foreach (var c in Model.Courses)
                    {
                        if (c.CourseType == "Dessert" && c.Date <= GetDates.GetNextWeeksSunday() && c.Date >= GetDates.GetNextMonday())
                        {
                            <option value="@c.CourseID">@c.Name</option>
                        }
                    }
                </select>
            </div>
            <div class="form-group">
                <input type="submit" value="create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

@section scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    <script src="/lib/jquery/dist/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("input.input-validation-error")
                .closest(".form-group").addClass("has-danger");
        });
    </script>
}

Я пробовал несколько вещей, таких как добавление дополнительных операторов if, я создал поддельный объект для курса. Но все равно мое приложение выдает ошибку, что когда один не выбран, и значение должно быть 0 ...

Заранее спасибо!

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