使用实体框架进行MVC验证

时间:2015-02-10 15:14:41

标签: asp.net-mvc entity-framework validation

使用Entity Framework时,我无法在MVC页面上进行验证。如果有人能指出我做错了什么我会很感激。它肯定会看到元数据,因为标签正在运行。但是,当我点击提交时,它会继续到下一页。它是否与我在视图模型中有一个类的实例这一事实有关?

元数据类

[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(@"^\w+@[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; }
}

标记样本

<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);
    }

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

与上述答案无关。我在布局页面上错过了jquery验证和jquery不显眼的脚本,因此导致验证不会触发。您无需在控制器中执行任何操作即可正常工作。