Проверка объекта существует при редактировании - PullRequest
0 голосов
/ 30 июня 2011

Это очень глупо, но я не могу понять, насколько я понимаю.

Я хочу проверить, что имя пользователя Сотрудника еще не существует при добавлении или редактировании Сотрудника. Вот мой вид модели:

public class EmployeeViewModel
{
    [ScaffoldColumn(false)]
    public int EmployeeId { get; set; }

    [Remote("UsernameExists", "Employees", ErrorMessage = "Username already exists")]
    public string Username { get; set; }
}

И в моем контроллере:

public ActionResult UsernameExists(string username)
{
    return Json(!_employeesRepository.UsernameExists(username), JsonRequestBehavior.AllowGet);
}

Функция в хранилище сотрудников:

public bool UsernameExists(string username)
{
    return Employees.Where(e => e.Username.ToLower().Equals(username.ToLower())).Count() > 0;
}

Это прекрасно работает, когда я создаю Сотрудника. Но если я редактирую один и пытаюсь сохранить его, я получаю сообщение об ошибке, что имя пользователя уже существует (что правда). Поэтому мне нужно как-то сказать функции, что все в порядке, имя пользователя существует, если я редактирую Сотрудника с этим именем пользователя.

Возможно ли это с удаленной проверкой?

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Передайте дополнительный флаг, чтобы указать, в каком режиме вы находитесь, например. bool isEditMode и, исходя из этого, настройте свои результаты. Вы можете использовать атрибут AdditionalFields для передачи этой информации; Также посмотрите здесь: Удаленная проверка в ASP.Net MVC 3: как использовать дополнительные поля в методе действия

0 голосов
/ 30 июня 2011

Вы можете решить эту проблему, используя две разные модели представления, в которых вы выводите одну из другой: суперкласс может использоваться для редактирования, подкласс - для вставок с удаленной проверкой.

public class EmployeeViewModel // The normal one, can be used for editing
{
    [ScaffoldColumn(false)]
    public int EmployeeId { get; set; }

    public virtual string Username { get; set; }
}

public class InsertEmloyeeViewModel : EmployeeViewModel
{
    [Remote("UsernameExists", "Employees", ErrorMessage = "Username already exists")]
    public override string Username { get; set; }

}

Когдаedit-functionlity также содержит некоторые «особенности», вы можете получить третий класс «EditEmployeeViewModel» из базового класса EmployeeViewmodel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...