Обнулить данные проверки в некоторых формах MVC

Я использовал Data Annonation в моем проекте, чтобы проверить мои модалы. например, у меня есть класс со следующими Data Annonation свойства

 public class tbl_store
 {
    [Required(ErrorMessage = "Name is required")]
    public string Name{ get; set; }
    [Required(ErrorMessage = "Email is required")]
    [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
    public string Email{ get; set; }
    [Required(ErrorMessage = "Phone Number is required")]
    [DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")]
    [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Invalid Phone number")]
    public string Contact{ get; set; }
    [Required(ErrorMessage = "Address is required")]
    public string Address{ get; set; }
    [Required(ErrorMessage = "Detail is required")]
    public string Detail{ get; set; }
}

Теперь у меня есть форма, которая использует вышеуказанный класс как Model и иметь входные текстовые поля для Name, Email а также Contact поля.

Когда я отправляю эту форму, я использую следующие ActionResult метод

  [HttpPost]
    public ActionResult createStore(tbl_store modal)
    {
        try
        {
            using (joyryde_storeEntities context = new joyryde_storeEntities())
            {

                    tbl_store objStore = new tbl_store()
                    {
                        Name = modal.Name,
                        Email = modal.Email,
                        Contact = modal.Contact                          
                    };
                    context.tbl_store.Add(objStore);
                }                   
                context.SaveChanges();
            }
        }
        catch (DbEntityValidationException ex)
        {

        }
       // Some more code
    }  

Здесь в Context.SaveChanges() исключение выдает с сообщением System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Когда я отлаживаю исключение, это вызывает у меня исключение из-за Address а также Detail поля обязательные для заполнения и размещены с null ценности.

Я не хочу добавлять эти поля в этой форме.

Как я могу аннулировать Data Annonation для этих двух полей или некоторых других вещей, чтобы успешно опубликовать данные этой формы.

2 ответа

Вы должны использовать модель представления. Модели представления - это некоторая модель для создания моделей, которая имеет свойство diffrence и атрибуты из основной модели. создайте каталог view model в каталоге модели и добавьте новую модель, которая address а также details не требуются.

Проблема здесь не в том, что вы используете / не используете модели представлений. Проблема в вашей базе данных. Я предполагаю, что вы используете EF Code First. Вы должны удалить обязательные атрибуты из вашей сущности, чтобы иметь возможность сохранить их в базе данных без ошибки, с которой вы сейчас сталкиваетесь. Если вы не используете EF Code First, в дополнение к удалению атрибутов, вы должны изменить свою базу данных, чтобы разрешить значения NULL в 2 столбцах.

Однако, если вам нужен другой вид, где эти 2 поля обязательны, вам нужно использовать 2 модели представлений, которые будут выполнять индивидуальную проверку для каждого вида. Один для имени, электронной почты и контакта, а другой для адреса и деталей.

Другие вопросы по тегам