如何在ajax上调用服务器端验证控制器发送的值

时间:2014-03-14 13:34:36

标签: asp.net-mvc-4

通过ajax调用发送的值的服务器端验证。 虽然我已经应用了一些客户端jquery验证 但如果有人阻止客户端javascript,那么它将失败。 我想知道如何为发送到控制器的ajax post值应用服务器端验证,并且可以通知客户端。

我的案例是在ajax帖子上我发送了一些来自订单网站的价值。 像quanity,price,itemsize我想知道如何在控制器上验证这些值。

var CustomCategory = {
    OnCustomClick: function (productID, productOptionID, itmPrice, qty) {
        $.ajax({
            url: 'Customization/GetProductCustomization?pId=' + productID + '&pOptionID=' + productOptionID + '&itmPrice=' + itmPrice + '&qty=' + qty,
            //url: 'Customization/vwGetProductCustomization',
            type: 'POST',
        }).success(function (data) {
            //alert(data);
            $("#myModal").html(data);
        });
    }
}

就像有人为java脚本关闭数量数字功能并发送一些错误的值。

1 个答案:

答案 0 :(得分:1)

您应该从实现服务器端模型验证开始,然后扩展到jquery不显眼的验证。 默认情况下有一大堆支持,如果你需要创建自己的自定义验证,你只需要做一些实际的努力工作。要创建自定义验证程序,您可以查看this answer并阅读提供的链接以获取更多信息。

要创建som标准模型验证,您只需将它们添加到 ViewModel

public class Movie {
public int ID { get; set; }

[Required]
public string Title { get; set; }

[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }

[Required]
public string Genre { get; set; }

[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }

[StringLength(5)]
public string Rating { get; set; }
}

您需要导入 System.ComponentModel.DataAnnotations 命名空间才能使用此属性。完成后,只需包含 jquery.unobtrusive 脚本,然后在使用ajax发布表单之前,只需检查表单是否有效,否则您只能返回false:

if ($(form).valid()) {
    $.ajax({ .....
}
else {
    return false;
}

为了确保没有任何东西滑过,您还需要在控制器中检查您的型号

public ContentResult CheckForm(SomeViewModel vm)
{
    if (ModelState.IsValid) {
    ...... //Do something
    }
    return vm;
}

如果ViewModel上的所有验证属性都有效, IsValid 属性将仅返回 true