如何确保来自同一个源的两个下拉列表不具有相同的值
本文关键字:下拉列表 两个 何确保 确保 同一个 | 更新日期: 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" });
}
}
这将验证DepartureTerminal
和DestinationTerminal
。