如何在模型编辑上处理远程属性? ASP.Net MVC3

时间:2012-09-02 15:45:22

标签: asp.net-mvc-3 model controller action remote-validation

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

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 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

我认为应该是这样的

您必须在编辑页面中将隐藏字段设为InitialUsername,并在Remote模型上设置User属性,其中AdditionalFields包含InitialUsername

<强>控制器

    [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);
    }

答案 2 :(得分:0)

只需添加要禁用远程验证的Html属性即可 喜欢

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

如果存储,也会看到HiddenField值 这将是工作

答案 3 :(得分:0)

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

On Model put:[Remote("IsUserNameUsed", "User", AdditionalFields="InitialUserName")]

在Controller actionmethod中编写action action方法如下:

    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);  
}    
}