2016-02-17 3 views
0

у меня есть это поле называется 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 не является параметром?

+0

Лучший вариант: Creat e 2 отдельные модели просмотра с различными атрибутами '[Remote]'. Другой параметр: Сделать параметр 'Int? Friend_Id', (вам не нужно менять модель) и проверьте «If (Friend_Id.HasValue)» - если это значит, вы знаете, знаете ли вы, что редактируете существующий «Друг», иначе вы создаете нового «Друга» и можете настроить запрос соответственно –

+0

@StephenMuecke Я использую базу данных сначала, а 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

Смежные вопросы