【问题标题】:How to make Server side validation on ajax call for values sent at controller如何在 ajax 调用上对控制器发送的值进行服务器端验证
【发布时间】:2014-03-14 13:34:36
【问题描述】:

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

我的案例是在 ajax 帖子上,我正在发送一些从订单站点获取的值。 像数量、价格、项目大小一样,我想知道如何在控制器上验证这些值。

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 脚本关闭了数量数值功能并发送了一些错误的值。

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案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;
    }
    

    IsValid 属性仅在您的 ViewModel 上的所有验证属性都有效时才返回 true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2015-10-02
      • 2020-12-19
      • 2015-08-29
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      相关资源
      最近更新 更多