我正在开发一个应用程序,其中我有一个带有模型“StudentListModel”的表单。
我在同一页面中有一个按钮,而不是提交按钮。我编写了一个ajax函数,它在指定的控制器中调用一个action方法。
现在我的问题是学生名有一个文本框,
[StringLength(160, MinimumLength = 3)]
[Display(Name = "First Name")]
[Required]
[Remote("CheckDuplicateNames", "AddStudent")]
public string StudentName { get; set; }
这些验证都没有触发。但是如果我将按钮设为提交,这些都可以正常工作。
除了使用formubmission之外,还有什么方法可以进行模型验证吗?
答案 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
类继承的另一种方法。