远程验证不适用于MVC

时间:2015-03-17 04:58:27

标签: asp.net-mvc validation

我在我的项目中进行了远程验证,以避免DB中的重复条目。我的模型类就像这样

    public class Supplier
{
    public int SupplierId { get; set; }
    public string SupplierName { get; set; }
    [Required, DisplayName("Supplier Code")]
    [Remote("ViCodeExists", "Supplier", "Vi Code is already exists.", AdditionalFields = "SupplierId")]
    public string SupplierCode { get; set; }

}

SupplierController内,我有这样的功能

 public JsonResult ViCodeExists(string SupplierCode, int SupplierId = 0)
    {
        var user = _db.Suppliers.Where(x => x.SupplierCode == SupplierCode.Trim() && x.SupplierId != SupplierId);
        return !user.Any() ?
           Json(true, JsonRequestBehavior.AllowGet) :
           Json(string.Format("{0} is already exists.", SupplierCode),
               JsonRequestBehavior.AllowGet);
    }

在我的创建视图

 @Html.TextBoxFor(model => model.SupplierCode)
 @Html.ValidationMessageFor(model => model.SupplierCode)

一切看起来都不错,但这种验证不起作用。我试过在控制器中添加断点,但它永远不会被击中。任何人都可以指出我在这里做错了吗?

  

注意:我在其他一些控制器中有相同类型的验证   同样的项目,他们都运作良好。问题只出在这个问题上。

1 个答案:

答案 0 :(得分:1)

您使用RemoteAttribute [Remote("ViCodeExists", "Supplier", ErrorMessage = "Vi Code is already exists.", AdditionalFields = "SupplierId")] public string SupplierCode { get; set; } 接受3个字符串参数,其中第3个参数是区域名称(不是错误消息)。

将属性更改为

[Remote("ViCodeExists", "Supplier", AdditionalFields = "SupplierId")]
public string SupplierCode { get; set; }

请注意,无论如何都要覆盖方法return语句中的错误消息,因此您可以省略它并只使用

{{1}}