如何确保来自同一个源的两个下拉列表不具有相同的值

本文关键字:下拉列表 两个 何确保 确保 同一个 | 更新日期: 2023-09-27 18:11:22

在我的应用程序中,一个页面包含两个具有相同来源的下拉列表。例如,表单创建了一条公交路线。在表格中,有一个DepartureTerminal dropdownlist和一个DestinationTerminal dropdownlist,它们都有Terminal表有它们的来源。

挑战在于我想确保用户不会创建具有相同出发地和目的地的路由。

这是我的视图模型

[Required(ErrorMessage = "Departure Terminal is required")]
    [Description("The starting terminal where the bus will move from")]
    [Display(Name = "Departure Terminal *")]
    public string DepartureTerminal { get; set; }
    [Display(Name = "Destination Terminal *")]
    [Description("The terminal the bus will stop at")]
    [Required(ErrorMessage = "Destination Terminal is required")]
    public string DestinationTerminal { get; set; }
    [Display(Name = "Bus Fare *")]
    [Description("The amount the route cost")]
    [Required(ErrorMessage = "Bus Fare is required")]
    [DataType(DataType.Currency, ErrorMessage = "Invalid Amount")]
    public decimal BusFare { get; set; }
    [Display(Name = "Route Type *")]
    [Description("State if the route is a long journey or not")]
    [Required(ErrorMessage = "Route Type is required")]
    public string RouteType { get; set; }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (DepartureTerminal == DestinationTerminal)
            yield return new ValidationResult("Your departure terminal cannot be the same as your destination terminal.");
    }

此模型未验证。请ehelp

如何确保来自同一个源的两个下拉列表不具有相同的值

您遇到的问题是它们都使用Terminal作为相同的数据源。如果Terminal是一个DataTable,那么只需为出发或目的地终端创建一个新的DataTable,并将现有的表复制到其中。

可以将每个下拉列表绑定到其中一个表。

我终于能够解决这个问题了。这只是一个遗漏的错误。模型的类应该继承自System.ComponentModel.DataAnnotations.IValidatableObject并实现Validate方法。完整的模型为:

public class BusRouteViewModel : IValidatableObject 
{
    [Required(ErrorMessage = "Departure Terminal is required")]
    [Description("The starting terminal where the bus will move from")]
    [Display(Name = "Departure Terminal *")]
    public string DepartureTerminal { get; set; }
    [Display(Name = "Destination Terminal *")]
    [Description("The terminal the bus will stop at")]
    [Required(ErrorMessage = "Destination Terminal is required")]
    public string DestinationTerminal { get; set; }
    [Display(Name = "Bus Fare *")]
    [Description("The amount the route cost")]
    [Required(ErrorMessage = "Bus Fare is required")]
    [DataType(DataType.Currency, ErrorMessage = "Invalid Amount")]
    public decimal BusFare { get; set; }
    [Display(Name = "Route Type *")]
    [Description("State if the route is a long journey or not")]
    [Required(ErrorMessage = "Route Type is required")]
    public string RouteType { get; set; }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (DepartureTerminal == DestinationTerminal)
            yield return new ValidationResult("Departure Terminal cannot be the same as Destination Terminal.", new[] { "DepartureTerminal", "DestinationTerminal" });
    }
}

这将验证DepartureTerminalDestinationTerminal