0

我在我的模型中使用远程属性来检查重复的页面标题,如下所示

public class Page
{
  [Remote("CheckDuplicate", "Page", ErrorMessage = "Title already taken")]
  public string Title { get; set; }
}

在控制器中,我根据“检查”结果返回JsonResult数据,如下所示:

public JsonResult CheckDuplicate(string Title)
{
   var result = db.Pages.Where(a => a.Title == Title).Count() == 0;
   return Json(result, JsonRequestBehavior.AllowGet);
}

这在创建操作中运行良好,但问题是,它限制我编辑现有页面,因为它正在检查相同的查询。

如何解决这个问题呢?请给我一些建议

4

4 回答 4

5

您的问题类似于:ASP.NET MVC 3 Remote validation to allow original value

我认为诀窍是AdditionalFields在模型中使用远程验证属性的参数,并将其与视图中的隐藏字段结合起来——就像上面的 StackOverflow 帖子中所建议的那样。然后,您可以将“初始”值与新值一起发送到远程验证方法,并使用这两个参数进行唯一性检查。

如何解决这个问题的另一个例子可以在这里找到:https ://stackoverflow.com/a/4756796/700926

AdditionalFields可以在此处找到文档:http: //msdn.microsoft.com/en-us/library/system.web.mvc.remoteattribute.additionalfields (v=vs.98).aspx

于 2012-09-02T16:15:15.420 回答
1

我觉得应该是这样

您必须在编辑页面中有一个隐藏字段,InitialUsername并且模型上的Remote属性必须包含UserAdditionalFieldsInitialUsername

控制器

    [HttpPost]
    public JsonResult doesUserNameExist(string UserName,string InitialUsername)
    {
        User user=null;
        //Check if user already exists
        if (UserName.Equals(InitialUsername)==false)
        {
         user = db.Users.Where(u => u.USERNAME == UserName).FirstOrDefault();
        }
        //

        return Json(user == null);
    }
于 2017-01-03T11:39:52.140 回答
0

只需在要禁用远程验证的地方添加 Html 属性,例如

 @Html.EditorFor(model => model.CODE, 
                    new { 
                          htmlAttributes = new { 
                                                 @readOnly = true, 
                                                 @data_Val = false } })

如果您存储了它,还可以查看 HiddenField 值

于 2015-11-25T06:55:22.703 回答
0

我是使用以下步骤解决的:在我看来,我把@Html.Hidden("InitialUserName", Model.UserName)

在模型上放置:[Remote("IsUserNameUsed", "User", AdditionalFields="InitialUserName")]

在 Controller actionmethod 中编写 actionmethod 如下:

    public JsonResult IsUserNameUsed(string UserName, string InitialUserName){
    bool isExist = true;
    if(UserName  != string.empty && InitialUserName == "undefined"){
    var isexist= db.model.where( x=>x.UserName == UserName).single();
    if(isexist != string.empty){
    bool isExist = false;
    }

    if(UserName  != string.empty && InitialUserName != "undefined"){
    var isexist= db.model.where( x=>x.UserName == UserName && x.UserName != InitialUserName ).single();
    if(isexist != string.empty){
    bool isExist = false;
    }    
return Json(isExist , JsonRequestBehavior.AllowGet);  
}    
}
于 2016-02-17T05:39:14.530 回答