3

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

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

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

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

这些验证都没有触发。但是,如果我将按钮设置为提交,这些将起作用。

除了使用表单提交之外,还有其他方法可以进行模型验证吗?

4

2 回答 2

3

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

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

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

$('#yourButtonId').click(function() {
    var student = {};
    student.StudentName = $('#StudentName').val();
    $.post('@Url.Action("ActionMethodName")', student).done(function (data) {
    //handle returned result from ActionMethod}
    });
});
于 2013-11-04T13:41:22.400 回答
0

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

如果您的模型没有填充值,但您手头有它们,您可以使用从类UpdateModel(model, values)继承的另一种方法来填充它。Controller

于 2013-09-15T19:46:05.233 回答