C# 如何确保来自同一个源的两个DropDownList的值不相同
在我的应用程序中,一个页面包含两个具有相同源的dropdownlist。例如,表单创建了一条公交线路。在表单中,有一个departmental-minal-dropdownlist和一个DestinationTerminal-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
[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。有什么问题?如果出发地和目的地相同,验证将失败。你必须更具体地说明你想要什么,而你还没有。我使用实体框架来实现这一点。请提供例子