【问题标题】:Server side Remote validation not firing服务器端远程验证未触发
【发布时间】:2017-11-04 15:20:12
【问题描述】:

我正在尝试验证 AccessoryType 的唯一性。我已将远程验证放入模型中。

这是代码设置,

在模型中,

public class AccessoryTypeMasterMetaData
{
    [Remote("checkAccessoryTypeExist", "AccessoryType")]
    [Required(ErrorMessage = "Please enter accessory type.")]
    [StringLength(20, ErrorMessage = "Please enter maximum of {1} characters in accessory type.")]

    public string AccessoryType { get; set; }
}

我已经把**checkAccessoryTypeExist方法放到了API Controller中,**

[HttpPost]
    [AllowAnonymous]
    [Route("api/AccessoryType/checkAccessoryTypeExist")]
    public IHttpActionResult checkAccessoryTypeExist(string accessoryType, int accessoryTypeID)
    {
        AccessoryTypeMasterService accessoryTypeMasterService = new AccessoryTypeMasterService();

        BaseResponseModel<bool> baseResponseModel = new BaseResponseModel<bool>();
        baseResponseModel.status = true;
        baseResponseModel.data = false;

        if (!string.IsNullOrEmpty(accessoryType))
        {
            baseResponseModel.data = accessoryTypeMasterService.CheckAccessoryType(accessoryType, accessoryTypeID);
            baseResponseModel.message = LES_Common.STATUS_SUCCESS;
        }

        return new BaseResponseResult<bool>(baseResponseModel, Request);

    }

所以问题是远程验证没有在服务器端触发 但其他所有验证都在触发(如 Required,StringLength )

我的代码有问题吗?帮帮我..

【问题讨论】:

    标签: asp.net angularjs asp.net-mvc validation asp.net-web-api


    【解决方案1】:

    在您的方法声明中有两个参数 accessoryType , accessoryTypeID 。在您的 AccessoryTypeMasterMetaData 模型中,您只能将其应用于 AccessoryType 。因此,如果您还需要 accessoryTypeID 进行检查,您将只获得 AccessoryType 值,那么您需要在属性上更改 RemoteAttribute,如下所示:

    [Remote("checkAccessoryTypeExist", "AccessoryType",HttpMethod = "POST", AdditionalFields = nameof(AccessoryTypeID ), ErrorMessage = "Error message to display." )]
    

    最好将方法签名更改为:

    public IHttpActionResult checkAccessoryTypeExist(AccessoryTypeMasterMetaData modelData)
        {
    
    
     // You can access it here i.e. modelData.AccessoryType and modelData.AccessoryTypeID
    
        }
    

    【讨论】:

    • 我认为您使用的是较低版本,因此不支持它。您可以删除 nameof(AccessoryTypeID) 并使用 - "AccessoryTypeId"
    • 如何使用模型端的“GetUrl”字段使其工作,因为我的路线是“api/accessoryType/checkAccessoryTypeExist”?
    • @MansiKalola ,我不明白你为什么在模型方面需要GetUrl ?因为如果你用Remote 属性正确地装饰你的模型属性,那么它会自动从控制器调用定义的动作。上面的代码不能正常工作吗??
    • 我认为代码无法识别 "checkAccessoryTypeExist" 方法,所以我想使用 'routeName' 或 'getURL' ...
    • No Mansi,不需要手动绑定。你可以检查它here。有什么错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2010-10-16
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多