Modelde ve bazı ek özelliklerde bulunan ViewModel var. Modelde ve mülkte doğrulama vardır, ancak yürütüldüğünde, yalnızca Model üzerinde doğrulama kontrol edilir, mülkte doğrulama göz ardı edilir.ASP.NET MVC Model doğrulaması ViewModel üzerinde çalışmıyor
Model:
[MetadataType(typeof(Customer_Validation))]
public partial class Customer
{
}
public class Customer_Validation
{
[Required(ErrorMessage="Please enter your First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Please enter your Last name")]
public string LastName { get; set; }
[Required(ErrorMessage = "Sorry, e-mail cannot be empty")]
[Email(ErrorMessage="Invalid e-mail")]
public string Email { get; set; }
}
ViewModel
public class RegisterViewModel
{
public Customer NewCustomer { get; private set; }
[Required(ErrorMessage="Required")]
public string Password { get; private set; }
public RegisterViewModel(Customer customer, string password)
{
NewCustomer = customer;
Password = password;
}
}
Kontrolör
public ActionResult Create()
{
Customer customer = new Customer();
RegisterViewModel model = new RegisterViewModel(customer, "");
return View(model);
}
[HttpPost]
public ActionResult Create(Customer newCustomer, string password)
{
if (ModelState.IsValid)
{
try
{
// code to save to database, redirect to other page
}
catch
{
RegisterViewModel model = new RegisterViewModel(newCustomer, password);
return View(model);
}
}
else
{
RegisterViewModel model = new RegisterViewModel(newCustomer, password);
return View(model);
}
}
Görünüm
@using (Html.BeginForm())
{
<table>
<tr>
<td>First Name:</td>
<td>@Html.TextBoxFor(m => m.NewCustomer.FirstName)</td>
<td>@Html.ValidationMessageFor(m => m.NewCustomer.FirstName)</td>
</tr>
<tr>
<td>Last Name:</td>
<td>@Html.TextBoxFor(m => m.NewCustomer.LastName)</td>
<td>@Html.ValidationMessageFor(m => m.NewCustomer.LastName)</td>
</tr>
<tr>
<td>E-mail:</td>
<td>@Html.TextBoxFor(m => m.NewCustomer.Email)</td>
<td>@Html.ValidationMessageFor(m => m.NewCustomer.Email)</td>
</tr>
<tr>
<td>Password:</td>
<td>@Html.TextBoxFor(m => m.Password)</td>
<td>@Html.ValidationMessageFor(m => m.Password)</td>
</tr>
</table>
<input type="submit" value="Register" />
}
Parola boş bırakılan formu gönderirseniz boş bırakın. Müşteri alanlarını boş bırakırsam (parola alanı hariç) hataları gösteriyorsa (
Bu mantık geliyor ve düzeltmeme yardımcı olabilir. Bu durumda, model validasyonunu kullanmak için en iyi çözümü buluncaya kadar kontrolördeki diğer özelliklerin validasyonunu ayrı yapacağım. Çok teşekkürler. – Nestor
View'in ViewModel'i post kontrol ünitesine geçirmesini nasıl sağlıyorsunuz? Daha önce denedim ve formun ViewModel'i almasından bu yana "nullable parametresi" hatası gösteriliyor, ancak PostModel içindeki her modele geri gönderirken post denetleyicisindeki imzayı eşleştiremediğinden, denetleyici null değerini ViewModel parametresi, her bir modeli ViewModel için tek bir parametre yerine ayrı bir parametre olarak almak için post denetleyicide zorlar. – Nestor
@Nestor, görünümü bir ViewModel'i bir denetleyiciye iletmek için bu görünümde ve ViewModel'inizin özelliklerine karşılık gelen metin alanları içinde bir "