我在我的模型中使用远程属性来检查重复的页面标题如下
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);
}
这在创建操作中运行正常,但问题是,它限制了我编辑现有页面,因为它正在检查相同的查询。
如何解决这个问题?请建议我
答案 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);
}
}