MVC没有通过验证

时间:2012-03-07 15:31:06

标签: asp.net-mvc validation razor

我有以下查看代码:

@using (Html.BeginForm("Login", "Press", FormMethod.Post))
{
<fieldset>
    <legend>User Registration</legend>
    <div>
        @Html.TextBoxFor(model => model.FullName)
        @Html.ValidationMessageFor(model => model.FullName)
    </div>
    <div>
        @Html.TextBoxFor(model => model.Company)
        @Html.ValidationMessageFor(model => model.Company)
    </div>
    <div>
        @Html.TextBoxFor(model => model.EmailAddress)
        @Html.ValidationMessageFor(model => model.EmailAddress)
    </div>
    <div>
        @Html.CheckBoxFor(model => model.JoinMailingList)
        Please check this box to recieve a seasonal look book pdf and monthly newsletter
    </div>
    <p>
        <input type="submit" value="Proceed" />
    </p>
</fieldset>
}

这是我的Model

public class UserViewModel
{
    [Required(ErrorMessage = "Please enter your name.")]
    [MaxLength(100)]
    public string FullName { get; set; }

    [Required(ErrorMessage = "Please enter the name of your company.")]
    [MaxLength(50)]
    public string Company { get; set; }

    [Required(ErrorMessage = "Please enter your email.")]
    [DataType(DataType.EmailAddress)]
    [RegularExpression(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$", ErrorMessage = "Please enter a valid email address.")]
    [MaxLength(255)]
    public string EmailAddress { get; set; }

    public bool JoinMailingList { get; set; }
}

问题是当我点击'继续'按钮时,没有任何验证发生。它只发布没有验证的动作?我是否必须在Controller内执行此操作?

这是我的控制器代码:

public class PressController : Controller
{
    //
    // GET: /Press
    public ViewResult Index()
    {
        return View();
    }

    //
    // GET: /Press/Login
    public ViewResult Login()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Login(UserViewModel userViewModel)
    {
        return RedirectToAction("Index", "Press");
    }
}

2 个答案:

答案 0 :(得分:3)

确保您要发布的操作将视图模型作为参数:

[HttpPost]
public ActionResult Press(UserViewModel model)
{
    // at this stage the validation has been performed during
    // the process of model binding and now you could look in the 
    // modelstate if the model is vaild:

    if (!ModelState.IsValid) 
    {
        // validation failed => redisplay the view so that the user
        // can fix his errors. 
        // Note that calling ModelState.IsValid doesn't trigger any validation
        return View(model);
    }

    // at this stage we know that validation passed => we could do some processing
    // and redirect

    return RedirectToAction("Success");
}

或某些人也使用TryUpdateModel方法,该方法还允许您执行触发验证的模型绑定:

[HttpPost]
public ActionResult Press()
{
    var model = new UserViewModel();
    // validation will be triggered at this stage and the method
    // will return true or false based on the result of this validation
    if (!TryUpdateModel(model))
    {
        // validation failed => redisplay the view so that the user
        // can fix his errors. 
        return View(model);
    }

    // at this stage we know that validation passed => we could do some processing
    // and redirect

    return RedirectToAction("Success");
}

如果您想启用客户端验证,请确保在您的页面中引用以下2个脚本:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

答案 1 :(得分:1)

您是否启用了客户端验证?

请参阅ScottGu's post

中的“第3步:启用客户端验证”

在服务器端,您必须使用

检查模型是否有效
ModelState.IsValid