Обнулить данные проверки в некоторых формах 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 модели представлений, которые будут выполнять индивидуальную проверку для каждого вида. Один для имени, электронной почты и контакта, а другой для адреса и деталей.