C#.NET验证功能不会同时影响两个输入字段

问题描述 投票:2回答:1

所以我目前正在做一个学校项目,您必须为此申请膳食。一顿饭有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语句的操作,我为Course创建了一个假对象。但是仍然我的应用程序给出了一个错误,当未选择一个时,该值应为0 ...

提前感谢!

c# .net model-view-controller model-binding
1个回答
0
投票

您是否尝试过重新打开和关闭它? (不用担心,省去了很多麻烦)

© www.soinside.com 2019 - 2024. All rights reserved.