C# 如何确保来自同一个源的两个DropDownList的值不相同

C# 如何确保来自同一个源的两个DropDownList的值不相同,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,在我的应用程序中,一个页面包含两个具有相同源的dropdownlist。例如,表单创建了一条公交线路。在表单中,有一个departmental-minal-dropdownlist和一个DestinationTerminal-dropdownlist,这两个列表都有终端表和它们的源 挑战在于,我希望确保用户不会创建具有相同出发点和目的地的路线 这是我的视图模型 [Required(ErrorMessage = "Departure Terminal is required")] [Des

在我的应用程序中,一个页面包含两个具有相同源的dropdownlist。例如,表单创建了一条公交线路。在表单中,有一个departmental-minal-dropdownlist和一个DestinationTerminal-dropdownlist,这两个列表都有终端表和它们的源

挑战在于,我希望确保用户不会创建具有相同出发点和目的地的路线

这是我的视图模型

[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.");
    }

此模型无法验证。请提供帮助您遇到的问题是,他们都将终端用作同一数据源。如果终端是一个数据表,那么只需为出发或目的地终端创建一个新的数据表,并将现有的表复制到其中


然后可以将每个下拉列表绑定到一个表。

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

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" });
    }
}

这将同时验证departminal和DestinationTerminal。

有什么问题?如果出发地和目的地相同,验证将失败。你必须更具体地说明你想要什么,而你还没有。我使用实体框架来实现这一点。请提供例子