Удаленная проверка по комбинации раскрывающегося списка в MVC 5 - PullRequest
0 голосов
/ 29 января 2019

Кто-нибудь знает, как я могу выполнить удаленную проверку по комбинации раскрывающегося списка в MVC 5?

Короче говоря, я назначаю клиента пользователю, поэтому хочу убедиться, что клиент не можетбыть назначенным одному и тому же пользователю дважды.

Я создал действие проверки в моем контроллере, но оно не работает.Он говорит мне, что клиент был назначен пользователю независимо от комбинации, даже если эта комбинация не существует в базе данных.

Вот как выглядит моя модель:

public class UserCustomer : BaseAttributes
{
    [Key]
    public int UserCustomerID { get; set; }
    [Remote("CustomerAssignedToUser", "UserCustomer", AdditionalFields = "ApplicationUserID", ErrorMessage = "The customer has already been assigned to the selected user!")]
    public int CustomerID { get; set; }
    public virtual Customer Customer { get; set; }
    public int ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
} 

Вот действие проверки в моем контроллере:

public JsonResult CustomerAssignedToUser(int CustomerID, int ApplicationUserID)
{
    return Json(!db.UserCustomers.Any(x => x.CustomerID == CustomerID && x.ApplicationUserID == ApplicationUserID), JsonRequestBehavior.AllowGet);
} 

Вот два раскрывающихся списка на мой взгляд:

@Html.DropDownListFor(model => model.CustomerID, new SelectList((System.Collections.IEnumerable)ViewData["CustomerID"], "Value", "Text"), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CustomerID, "", new { @class = "text-danger" })

@Html.DropDownListFor(model => model.ApplicationUserID, new SelectList((System.Collections.IEnumerable)ViewData["ApplicationUserID"], "Value", "Text"), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ApplicationUserID, "", new { @class = "text-danger" }) 

Помощь будет оценена.Я на всю жизнь не вижу, что не так с моим кодом.

1 Ответ

0 голосов
/ 30 января 2019

Мне удалось решить проблему.Решение было довольно простым.Все, что мне нужно было сделать, это реализовать одну и ту же аннотацию данных в обратном порядке на дополнительном поле внутри модели, например так:

[Remote("CustomerAssignedToUser", "UserCustomer", AdditionalFields = "ApplicationUserID", ErrorMessage = "The customer has already been assigned to the selected user!")]
        public int CustomerID { get; set; }

[Remote("CustomerAssignedToUser", "UserCustomer", AdditionalFields = "CustomerID", ErrorMessage = "The customer has already been assigned to the selected user!")]
        public int ApplicationUserID { get; set; } 

Я считаю, что оно не работает так же хорошо с выпадающими списками, хотя и не всегдаобновлять немедленно и время от времени принимать несколько переключателей в раскрывающихся списках для правильной проверки.Это может быть потому, что идентификаторы являются значениями типа int, а не GUID.Этот метод отлично работает при использовании строк и текстовых полей, например, при проверке комбинации имени и фамилии.

...