Итак, я сейчас работаю над школьным проектом, для которого вы должны подать заявку на питание. У еды есть 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 ...
Заранее спасибо!