首页 > 解决方案 > mvc [Remote] 标签引用单独的项目控制器

问题描述

首先让我说我想我知道我的问题,但我不知道如何解决它。我的任务是为我们的应用程序清理验证部分。我们在不同的项目中有实体模型和 MVC 应用程序,一个称为“核心”,另一个称为“webapp”

我似乎无法触发我的 [远程] 验证。我已经完成了我的研究,但我相信这是因为,我试图在我的单独项目中引用一个控制器。

我的核心项目中的简化模型看起来像

namespace Project.Core.Models
{
    [Table(name: "MT_DATABASE_SERVERS")]
    public class DatabaseServer : ModelBase
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [MaxLength(500)]
        [Display(Name = "Database Server")]
        [Remote("IsPropertyExists","DatabaseServers", HttpMethod = "POST",ErrorMessage = "This Server is already in use.")]
        public string ServerName { get; set; }
    }
}

这是一个简化的控制器逻辑

namespace Project.WebApp.Controllers.Servers
{
    public class DatabaseServersController : ControllerBase
    {
        [HttpPost]
        public ActionResult Create(DatabaseServer databaseServer
        {
            using (var db = GetMTContext()) 
            {
                db.DatabaseServers.Add(databaseServer);
                db.SaveChanges();
                return RedirectToAction("List");
            }
        }

        [HttpPost]
        public ActionResult IsPropertyExists(string property)
        {
            using (var db = GetMTContext())
            {
                return Json(!db.DatabaseServers.Any(x => x.ServerName == property), JsonRequestBehavior.AllowGet);
            }
        }
    }
}

标签: c#asp.net-mvcvalidationentity-framework-6

解决方案


你需要指定AdditionalFields = "property"然后你的代码像

 [Remote("IsPropertyExists","DatabaseServers", AdditionalFields = "property", HttpMethod = "POST",ErrorMessage = "This Server is already in use.")]
    public string ServerName { get; set;a  }

但条件是您需要property 在模型或实体中添加或存在附加字段。


推荐阅读