Я понимаю, что есть много вопросов по этой проблеме. Но я все же смог решить это, потратив много часов, пытаясь отследить это.MVC 5 - Элемент с тем же ключом уже добавлен
Моя модель выглядит следующим образом:
public class Guide
{
public int GuideId { get; set; }
public int GuideTypeId { get; set; }
[Required(ErrorMessage = "Please enter a business name")]
[StringLength(80, ErrorMessage="The Business Name cannot exceed 80 characters")]
public string BusinessName { get; set; }
public System.DateTime? ActiveStartDate { get; set; }
public System.DateTime? ActiveEndDate { get; set; }
[DataType(DataType.Url, ErrorMessage="The website url entered is not a valid url")]
[StringLength(80, ErrorMessage = "The Website Url cannot exceed 80 characters")]
public string WebsiteURL { get; set; }
[Required(ErrorMessage = "Please enter a your primary location")]
[StringLength(80, ErrorMessage = "The Primary Location cannot exceed 80 characters")]
public string BaseLocation { get; set; }
[DataType(DataType.EmailAddress, ErrorMessage = "The email address entered is not a valid email address")]
[Required(ErrorMessage="Please enter a contact email address")]
[StringLength(80, ErrorMessage = "The Email Address cannot exceed 80 characters")]
public string EmailAddress { get; set; }
[DataType(DataType.PhoneNumber, ErrorMessage = "The phone number entered is not a valid phone number")]
[StringLength(20, ErrorMessage = "The Phone Number cannot exceed 20 characters")]
public string PhoneNumber { get; set; }
[Required(ErrorMessage = "Please enter a description of your fees")]
public string FeesDescription { get; set; }
public string VehiclesAvailable { get; set; }
public string AdditionalInformation { get; set; }
public string AccountName { get; set; }
public string Countries { get; set; }
public string NearestCities { get; set; }
public string Locations { get; set; }
public byte[] ProfileImage { get; set; }
public bool Approved { get; set; }
public System.DateTimeOffset LastModifiedTime { get; set; }
// These four properties are here so we can display all tour types, durations, languages and currencies in a checkbox layout on the page. These are not
// what the guide actually supports. These just represent all possible values.
public List<TourType> TourTypeList { get; set; }
public List<TourDuration> TourDurationList { get; set; }
public List<TourLanguage> TourLanguageList { get; set; }
public List<TourCurrency> TourCurrencyList { get; set; }
// These four properties represent what the guide does actually support
public virtual List<GuideTourType> GuideTourType { get; set; }
public virtual List<GuideTourDuration> GuideTourDuration { get; set; }
public virtual List<GuideTourLanguage> GuideTourLanguage { get; set; }
public virtual List<GuideTourCurrency> GuideTourCurrency { get; set; }
public bool HasImage
{
get
{
return ProfileImage.Length > 0;
}
}
public virtual GuideType GuideType { get; set; }
}
Я нашел кого-то, кто пытался отладить это, используя следующий обязательный код:
public class DebugModelBinder : DefaultModelBinder, IModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Dictionary<string, ModelMetadata> d = new Dictionary<string, ModelMetadata>(StringComparer.OrdinalIgnoreCase);
foreach (var p in bindingContext.ModelMetadata.Properties)
{
var propertyName = p.PropertyName;
try
{
d.Add(propertyName, null);
}
catch (ArgumentException ex)
{
throw new ArgumentException(String.Format("The Item {0} as already been added", propertyName), ex);
}
}
return base.BindModel(controllerContext, bindingContext);
}
}
Я был в состоянии получить этот код, чтобы работать, но исключение возникает, когда эта строка кода выполнена:
return base.BindModel(controllerContext, bindingContext);
Так что это происходит ening в базовом классе.
Это исключение создается, когда я делаю сообщение в форме на странице MVC 5. Мой метод контроллера C# никогда не вызван. Ошибка возникает в привязке, и я понятия не имею, какое свойство добавляется дважды. Я также не знаю, как это выяснить.
Если вам нужна дополнительная информация, я буду рад предоставить ее. Я потратил несколько часов на это.
Принимает ли действие модель «Руководство» в качестве параметра? Вы можете попробовать прокомментировать свойства один за другим и выяснить, какой из них вызывает проблему. – Zabavsky
@zabavsky - это именно то, что я начал делать. Я удалил большинство из них, и мой метод контроллера теперь вызван. Теперь мне просто нужно найти оскорбительное свойство. –
Какова подпись вашего метода Action Controller? –