Я использую MVC 5 с рамкой сущности 6 У меня модель содержит обязательного свойствоDisabled Обязательные в MVC 5
public class Slider
{
public int id { get; set; }
[NotMapped]
[ValidateFileAttributeForImages(ErrorMessageResourceName = "SliderFileError", ErrorMessageResourceType = typeof(GlobalRes))]
[Display(Name = "SliderFile", ResourceType = typeof(GlobalRes))]
public HttpPostedFileBase File { get; set; }
public string ImagePath { get; set; }
}
Мне нужно, чтобы удалить это требуется аннотации данных, так что я могу обновить или изменить эту модель так как я пользователь может загрузить изображение или нет в редактировании .. так что я нашел этот пост Disable Required validation attribute under certain circumstances
поэтому я сделал ViewModel, чтобы иметь те же свойства, но без необходимости.
public class SliderEditViewModel
{
public int id { get; set; }
[NotMapped]
[Display(Name = "SliderFile", ResourceType = typeof(GlobalRes))]
public HttpPostedFileBase File { get; set; }
public string ImagePath { get; set; }
}
в моем результате действия
public ActionResult EditSliderLayer(SliderEditViewModel slider, string Comand, HttpPostedFileBase File)
{
using (DBContext db = new DBContext())
{
if (ModelState.IsValid)
{
if (Comand == GlobalRes.EditBTN)
{
db.Entry(slider).State = EntityState.Modified;
db.SaveChanges(); <!-- here i got error -->
return View();
}
else if (Comand == GlobalRes.DeleteBTN)
{
}
}
List<Slider> SliderName = db.Slider.ToList();
ViewBag.SliderLayerName = new SelectList(SliderName, "id", "Header");
return View(slider);
}
}
Я получаю ошибку
Тип объекта SliderEditViewModel не является частью модели для текущего контекста.
ValidateFileAttributeForImages
public class ValidateFileAttributeForImages : RequiredAttribute
{
public override bool IsValid(object obj)
{
var file = obj as HttpPostedFileBase;
if (file == null)
{
return false;
}
if (file.ContentLength > 1 * 1024 * 1024)
{
return false;
}
try
{
if (Path.GetExtension(file.FileName) == ".png" || Path.GetExtension(file.FileName) == ".jpg" ||
Path.GetExtension(file.FileName) == ".jpeg" || Path.GetExtension(file.FileName) == ".bmg ")
{
return true;
}
}
catch
{
}
return false;
}
}
Вам необходимо сопоставить модель вашего просмотра с примером модели данных. А атрибут '[NotMapped]' в модели просмотра не имеет смысла (модели просмотра не связаны с EF в любом случае - [Что такое ViewModel в MVC?] (Http://stackoverflow.com/questions/11064316/what-is -viewmodel-в-MVC)). И как побочная заметка, вы неправильно указываете атрибут и предлагаете прочитать [этот ответ] (http://stackoverflow.com/questions/40199870/how-to-validate-file-type-of-httppostedfilebase-attribute-in- asp-net-mvc-4/40200034 # 40200034) –