2

我正在ASP .Net MVC 3使用C# and SQL Server 2005.

我也在使用实体框架和代码优先方法。

我有一个与我基地Poste中的桌子相关的模型。Poste

当我想添加新帖子时,我希望检查其 ID '主键',以免重复并产生异常。

我尝试使用Remote,但有一些问题。

这就是我尝试的:

模型 :

public class Poste
    {
        [Required]
        [Key]
        [Display(Name = "ID Poste :")]
        [Remote("PosteExists", "Poste", "ID is already taken.")]
        public string ID_Poste { get; set; }

在控制器“PosteController”中:

public JsonResult PosteExists(string poste)
        {
            var p = _repository.GetPosteByName(poste.Trim());
            return p == null ?
                Json(true, JsonRequestBehavior.AllowGet) :
                Json(string.Format("{0} is not available.", poste),
                    JsonRequestBehavior.AllowGet);
        }

首先,_repository在当前 Context 中不存在。

其次,我不是这个解决方案将检查基础的值。

4

3 回答 3

1

你不需要检查它是否被使用。只需定义一个整数类型的主键,它将在数据库中为插入的每条记录自动递增。

public int PosteID { get; set; }

按照惯例PosteID将成为 table 的主键Poste

于 2013-05-28T08:02:44.753 回答
0

您在该控制器中具有 db 访问权限,因此您可以对此进行检查。

public JsonResult PosteExists(string poste)
{
    var exists = db.Postes.Any(x => x.ID_Poste == poste.Trim())
    return !exists ?
        Json(true, JsonRequestBehavior.AllowGet) :
        Json(string.Format("{0} is not available.", poste),
        JsonRequestBehavior.AllowGet);
}

假设ID_Poste是您要检查的内容。

于 2013-05-28T08:23:52.403 回答
0

远程属性将正常工作。你从哪里得到你的 _repository 代码?为什么不能在控制器中创建实例?

另请注意,当您将表单发布回操作方法时,Remote 属性不会验证,您需要在服务器端再次验证它。

于 2013-05-28T08:36:57.120 回答