Если я правильно понимаю ваш вопрос, ваш int [] потенциально содержит целые числа, связанные с идентификатором платформы в вашей БД, и вы хотите убедиться, что ваш int [] содержит хотя бы один действительный PlatformID, верно?
Сразу же вы можете сделать простую проверку перед тем, как углубиться в свою логику:
// If there aren't any IDs in Platform that are in PlatformIDs...
if (!_siteDB.Platforms.Any(p => PlatformIDs.Contains(p.PlatformID)))
Return RedirectToAction("Index");
// And probably tell the user to check a box, if they did,
// One of your checkboxes isn't matching up with your PlatformIDs
В идеале, то, что вы хотите сделать, это добавить int [] к вашей модели, чтобы вы могли проверить валидацию модели.Поскольку база данных обычно не хранит int [], добавьте его в модель вашей игры.EF, вероятно, помещает ваши DB Entities в вашу папку Models, и если вы посмотрите на них, вы увидите, что они являются частичными классами.Так что добавьте это в папку «Модели»:
public partial class Game
{
public Dictionary<int, bool> SupportedPlatforms { get; set; }// Edited
}
// Also add this which you'll see why below
public partial class Platform
{
public static bool IsValidPlatformID(int PlatformID)
{
using (SiteDBEntities _siteDB = new SiteDBEntities())
return _siteDB.Platforms.Any(p => p.PlatformID.Equals(PlatformID));
}
}
Затем добавьте пользовательский класс ValidationAttribute:
public ContainsValidPlatformIDAttribute : ValidationAttribute
{
public ContainsValidPlatformIDAttribute() { }
public override bool IsValid(object value)
{
Dictionary<int, bool> supportedPlatforms = (Dictionary<int, bool>)value;
if (value == null)
return true;
foreach (int i in values)
{
if (supportedPlatforms.Values.Any(b => b.Equals(true)))// Edited
return false;
}
return true;
}
Теперь украсьте им свою собственность в классе Игры:
[ContainsValidPlatformID(Error = "You did not select a valid Platform.")]
public Dictionary<int, bool> SupportedPlatforms { get; set; }// Edited
(Отредактировано) Теперь вместо жесткого кодирования флажка для каждой платформы добавьте это вместо:
<%: Html.CheckboxFor(model => model.SupportedPlatforms[0]) %>
<%: Html.ValidationMessageFor(model => model.SupportedPlatforms[0]) %>
(Отредактировано) Теперь ваши флажки привязаны к модели, вы можете проверить модель в контроллереи вы можете удалить аргумент int [] из вашего метода Action.Все это было закодировано из моей головы в этом редакторе, поэтому вам может понадобиться настроить некоторые вещи здесь и там, но это направление, в котором вы должны двигаться при работе с моделями в представлениях.
Кроме того, посмотрите, чтоСкотт Гатри написал в своем блоге тему Проверка модели MVC .Надеюсь, с моим образцом и блогом Скотта вы будете направлены в правильном направлении.