2015-02-10 4 views
0

У меня возникли проблемы с получением валидации для работы на моей странице MVC при использовании Entity Framework. Если бы кто-то мог указать, что я делаю неправильно, я был бы признателен. Он определенно видит метаданные, потому что метки работают. Однако, когда я нажимаю submit, он просто переходит к следующей странице. Может ли это иметь какое-то отношение к тому факту, что у меня есть экземпляр класса внутри модели представления?Проверка MVC с помощью платформы Entity

Meta Data Class

[MetadataType(typeof(CompanyMetaData))] 
public partial class Company 
{ 
} 

[MetadataType(typeof(CompanyUserMetaData))] 
public partial class CompanyUser 
{ 
} 

public class CompanyMetaData 
{ 
    [Required(ErrorMessage = "Company Name is required")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Service Center is required")] 
    public string ServiceCenterCode { get; set; } 

    [Required(ErrorMessage = "Account Number is required")] 
    public string AccountNumber { get; set; } 

    [Required(ErrorMessage = "Edition is required")] 
    public string Edition { get; set; } 
} 

public class CompanyUserMetaData 
{ 
    [Required] 
    [RegularExpression(@"^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$", ErrorMessage = "Invalid Email Address")] 
    public string EmailAddress { get; set; } 

    [Required(ErrorMessage = "Password is required")] 
    public string Password { get; set; } 

    [Required(ErrorMessage = "First Name is required")] 
    public string FirstName { get; set; } 

    [DisplayName("Last Name")] 
    [Required(ErrorMessage = "Last Name is required")] 
    public string LastName { get; set; } 
} 

вид Модель

public class CreateCompanyViewModel : ILayoutAwareViewModel 
{ 
    public List<AdvisorServiceCenterVW> ServiceCenters { get; set; } 
    public LayoutViewModel LayoutViewModel { get; set; } 
    public Company newCompany { get; set; } 
    public CompanyUser newUser { get; set; } 
    public List<FuneralHome> newFuneralHomes { get; set; } 
} 

Markup Образец

<div class="form-group"> 
    <label>@Html.LabelFor(d=>d.newUser.LastName)</label> 
    <div class="controls"> 
     @Html.TextBoxFor(d => d.newUser.LastName, new { @class = "form-control" }) 
     @Html.ValidationMessageFor(d => d.newUser.LastName) 
    </div> 
</div> 

Контроллер

public ActionResult CreateCompanyLocations(CreateCompanyViewModel incomingModel) 
    { 
     var model = (CreateCompanyViewModel)TempData["model"]; 

     LayoutViewModel lvm = _layoutHelper.GetLayoutViewModelData("Configure New Company"); 
     model.LayoutViewModel = lvm; 

     model.newCompany = incomingModel.newCompany; 
     model.newUser = incomingModel.newUser; 

     var fhs = _siteService.GetCustomerLocations(model.newCompany.AccountNumber); 
     model.newFuneralHomes = new List<FuneralHome>(); 
     foreach (var fh in fhs) 
     { 
      model.newFuneralHomes.Add(new FuneralHome() 
      { 
       Address = fh.Address, 
       Name = fh.CustomerName, 
       City = fh.City, 
       AccountNumber = fh.AccountNumber, 
       ServiceCenterCode = fh.ServiceCenterCode, 
       State = fh.State, 
       ZipCode = fh.ZipCode, 
       Phone = fh.Phone, 
       ContactName = fh.ContactName 
      }); 
     } 

     TempData["model"] = model; 

     return View(model); 
    } 
+0

Поместить соответствующий код контроллера. –

+0

@CraigW. Обновлено –

ответ

1

Вам необходимо установить ModelState.IsValid в свой код контроллера и разветвить его. В настоящее время ваш контроллер просто обрабатывает модель, является ли она действительной или нет. Типичный шаблон выглядит примерно так:

if(ModelState.IsValid) 
{ 
    // Do stuff for when model is valid 
} 
else 
{ 
    // return the view with the invalid model to give the user 
    // a chance to fix it 
    return View(model); 
} 
+0

Так что это не работает как RequiredFieldValidators в веб-формах? Страница должна быть отправлена ​​для проверки правильности работы? –

+0

Существует некоторая проверка на стороне клиента, которая может иметь место, если у вас есть это, но в нижней строке указано, что если на страницах вам по-прежнему нужно проверить, есть ли у вас действующая модель или нет. –

+0

Могу ли я спросить, почему это было принято, а затем непринято? –

0

Это не имеет никакого отношения к вышеуказанному ответу. Мне не хватало проверки jquery и jquery ненавязчивых скриптов на моей странице макета, поэтому это привело к тому, что валидация не срабатывала. Вам не нужно ничего делать в контроллере, чтобы это работало правильно.

+0

До того момента, пока вы не добавите проверку, которая не может быть выполнена на стороне клиента (например, пользовательский валидатор), или вы столкнетесь с клиентом, у которого отключен JavaScript. Когда вы используете аннотации данных, вы всегда должны защищать ваш контроллер, что означает использование шаблона, который я опубликовал. –

Смежные вопросы