asp .net MVC中的模型验证

时间:2013-09-15 08:23:11

标签: ajax asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2-validation

我正在开发一个应用程序,其中我有一个带有模型“StudentListModel”的表单。

我在同一页面中有一个按钮,而不是提交按钮。我编写了一个ajax函数,它在指定的控制器中调用一个action方法。

现在我的问题是学生名有一个文本框,

    [StringLength(160, MinimumLength = 3)]
    [Display(Name = "First Name")]
    [Required]
    [Remote("CheckDuplicateNames", "AddStudent")]
    public string StudentName { get; set; } 

这些验证都没有触发。但是如果我将按钮设为提交,这些都可以正常工作。

除了使用formubmission之外,还有什么方法可以进行模型验证吗?

2 个答案:

答案 0 :(得分:3)

模型验证在执行ActionMethod之前自动完成,ModelState将填充有关该验证的信息。只要在默认的MVC生命周期中运行Controller和ActionMethods,就不需要调用ValidateModel。

具有参数的操作方法将使用MVC模型绑定填充参数的值。这意味着在Form或QueryString(以及一些其他源)中发布的任何值都将与复杂参数中的简单参数或属性进行名称匹配。使用HTML表单和MVC HtmlHelper方法创建输入类型,只需很少的工作即可获得所需的行为,但正如您所知,它需要表单提交才能发送数据。

ajax调用也将使用Model Binding填充模型,但它需要将字段发送到ActionMethod。使用jQuery就像在按钮上执行post或get请求一样简单点击事件传递一个带有模型属性的JavaScript对象。

$('#yourButtonId').click(function() {
    var student = {};
    student.StudentName = $('#StudentName').val();
    $.post('@Url.Action("ActionMethodName")', student).done(function (data) {
    //handle returned result from ActionMethod}
    });
});

答案 1 :(得分:0)

您可以在控制器方法中手动调用模型验证。语法只是ValidateModel(model)。这将根据模型的当前属性值验证模型,并填充ModelState字典中的任何错误。

如果您的模型没有填充值,但是您已经掌握了它们,则可以使用UpdateModel(model, values)填充它,这是从Controller类继承的另一种方法。