如何检查函数是从哪个视图调用的?

时间:2016-02-17 02:51:58

标签: asp.net asp.net-mvc

我的班级朋友

中有一个名为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?

1 个答案:

答案 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方法中调用该方法