我的班级朋友
中有一个名为Mobile_Number的字段[Remote("CheckMobileDuplicate", "Friends", ErrorMessage = "This mobile number is already in use", AdditionalFields = "Friend_Id")]
public string Mobile_Number { get; set; }
现在有2个视图,其中模型类朋友,创建视图和编辑视图的回发。
我的CheckMobileDuplicate函数如下
public JsonResult CheckMobileDuplicate(string Mobile_Number,int Friend_Id)
{
if (db.Friends.Any(x => (x.Mobile_Number == Mobile_Number) && (x.Friend_Id != Friend_Id))
return Json(false, JsonRequestBehavior.AllowGet);
else
return Json(true, JsonRequestBehavior.AllowGet);
}
现在条件为x.Friend_Id != Friend_Id
检查Friend_Id是否已经存在,所以当我们检查编辑视图时,它不会将mobile_number与数据库中同一朋友的mobile_number进行比较。
但是在创建中,Friend_Id未定义,因为尚未创建数据库表中的行,因此这不适用于create。
那么我如何检查函数是否从创建视图或编辑视图调用它,因为不能选择使用Friend_Id nullable?
答案 0 :(得分:1)
您应该使用视图模型。 RemoteAttribute
是视图特定属性,不属于数据模型。
public class FriendsVM
{
public int? Friend_Id { get; set; }
[Remote("CheckMobileDuplicate", "Friends", ErrorMessage = "...", AdditionalFields = "Friend_Id")]
public string Mobile_Number { get; set; }
.... // other properties of Friend
}
然后在视图中,为Friend_Id
@Html.HiddenFor(m => m.Friend_Id)
并将控制器方法修改为
public JsonResult CheckMobileDuplicate(string Mobile_Number, int? Friend_Id)
{
bool isUnique = IsUniqueMobile(Mobile_Number, Friend_Id);
return Json(isUnique, JsonRequestBehavior);
}
private bool IsUniqueMobile(string number, int? ID)
{
if (ID.hasValue) // its an existing Friend
{
return !db.Friends.Any(x => x.Mobile_Number == number && x.Friend_Id != ID.Value);
}
else // its a new Friend
{
return !db.Friends.Any(x => x.Mobile_Number == number);
}
}
请注意,我已将数据库访问代码重构为私有方法,因此也可以在POST方法中调用该方法