我在我的项目中进行了远程验证,以避免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)
一切看起来都不错,但这种验证不起作用。我试过在控制器中添加断点,但它永远不会被击中。任何人都可以指出我在这里做错了吗?
注意:我在其他一些控制器中有相同类型的验证 同样的项目,他们都运作良好。问题只出在这个问题上。
答案 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}}