Атрибут Отправить параметр на удаленный в MVC - PullRequest
0 голосов
/ 06 февраля 2019

Есть ли способ отправить параметр (не имя поля) из класса Model в Controller, используя атрибут Remote.

Например, у меня есть Model класс:

public class SubCategory
{
    [Key]
    public int ID { get; set; }
    public string ClassName
    {
        get { return "SubCategory"; }
    }
    [StringLength(450)]
    [Remote("IsSubCategoryExist", "Products", AdditionalFields = "ID, ClassName",
            ErrorMessage = "Product name already exists")]
    public virtual string Name { get; set; }
    public virtual string ParentName { get; set; }
}

Мне нужно отправить имя этого класса SubCategory в качестве параметра для IsSubCategoryExist метода в Productsконтроллер при срабатывании Remote.Это может быть достигнуто?

Обновление:

Код контроллера:

public async Task<JsonResult> IsSubCategoryExist(string Name, int? ID, string ClassName)
{
      var type = Assembly.GetExecutingAssembly()
                .GetTypes()
                .FirstOrDefault(t => t.Name == ClassName);

      if (type != null)
      {
         DbSet dbSet = _dbContext.Set(type);

         List<object> subCategories;
         if(ID == null)
         {
             subCategories = await dbSet.Where("Name == @0", Name) 
                                        .Take(1).ToListAsync();
         }
         else
         {
             subCategories = await dbSet.Where("Name == @0 and Id != @1", Name,ID)
                                        .Take(1).ToListAsync();
         }

         if(subCategories.Count > 0)
         {
            return Json(false,JsonRequestBehavior.AllowGet);
         }
         return Json(true,JsonRequestBehavior.AllowGet);
     }
     else
     {
        throw new Exception("Table name does not exist with the provided name");
     }
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Наряду с выполнением следующих действий:

public string ClassName { get {return "SubCategory";} }

[Remote("IsSubCategoryExist", "Products", AdditionalFields = "ID, ClassName",
        ErrorMessage = "Product name already exists")]
public string Name { get; set; }

Вы должны поместить скрытое поле в форму следующим образом, в противном случае оно выдаст ClassName is undefined ошибку:

Html.HiddenFor(x => x.ClassName)
0 голосов
/ 06 февраля 2019

Полагаю, вы могли бы добавить поле к вашей модели со статическим значением, а затем добавить его в AdditionalFields:

public string ClassName { get {return "SubCategory";} }

[Remote("IsSubCategoryExist", "Products", AdditionalFields = "ID, ClassName",
        ErrorMessage = "Product name already exists")]
public virtual string Name { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...