Model view controller MVC数据库重复检查,编辑时出现问题
在创建条目(比如用户名)时,我必须对数据进行某种重复检查。我就是这样做的。它是用VB编写的,不过不用麻烦了 在控制器中: 在模型中: 并在视图中使用标准JS验证库Model view controller MVC数据库重复检查,编辑时出现问题,model-view-controller,editing,duplication,Model View Controller,Editing,Duplication,在创建条目(比如用户名)时,我必须对数据进行某种重复检查。我就是这样做的。它是用VB编写的,不过不用麻烦了 在控制器中: 在模型中: 并在视图中使用标准JS验证库 它真的很好用。。。创建时。问题是,编辑时不能保存相同的用户名,因为客户端验证是禁止的。。因为它已经存在于数据库中。如何对当前的“用户名”进行验证,但对其他用户名进行验证。或者,应该使用自定义JS和从模型中删除的[remote]来重做。谢谢我自己找到了解决问题的办法。如果有人需要,我会把它寄出去。这不是很漂亮,但很好用。 我所做的是,当
它真的很好用。。。创建时。问题是,编辑时不能保存相同的用户名,因为客户端验证是禁止的。。因为它已经存在于数据库中。如何对当前的“用户名”进行验证,但对其他用户名进行验证。或者,应该使用自定义JS和从模型中删除的[remote]来重做。谢谢我自己找到了解决问题的办法。如果有人需要,我会把它寄出去。这不是很漂亮,但很好用。 我所做的是,当我调用视图进行编辑时,我传递一个TempData[name]。当编辑字段和JS调用CheckForDuplication方法时,我可以读取TempData[name]的内容TempData似乎在从View返回到controller方法的转换过程中“幸存”,这与ViewBag和ViewData不同,并且在考虑TempData[name]时进行复制检查。问题是,在第一次检查中,TempData被擦除干净,寿命似乎只有一个请求那么长。。。。我还向视图传递了一个ViewBag.name,并生成了一个JS脚本,该脚本调用了一个方法,该方法使用ViewBag.name的值重新设置TempData[name],因为TempData[name]只能在服务器端设置 控制器 " 看法 看起来很奇怪,但很有效。我希望它对某人有用
Function CheckForDuplication(ByVal UserName As String) As JsonResult
If db.Users.Count(Function(x) x.Username.ToLower() = UserName.ToLower()) > 0 Then
Return Json(False, JsonRequestBehavior.AllowGet)
Else
Return Json(True, JsonRequestBehavior.AllowGet)
End If
End Function
<Remote("CheckForDuplication", "User", HttpMethod:="POST", ErrorMessage:="username not available")>
Public Property Username As String
Public Function Edit(UserId As Integer) As ViewResult
Dim user As User= context.User.Find(UserId)
ViewBag.UserName = user.UserName
TempData("UserName") = user.UserName
Return View(user)
End Function
Function CheckForDuplicationUserName(ByVal UserName As String) As JsonResult
If context.User.Count(Function(x) x.UserName.ToLower() = UserName.ToLower()) = 0 Then
Return Json(True, JsonRequestBehavior.AllowGet)
ElseIf TempData("UserName") Is Nothing Then
Return Json(False, JsonRequestBehavior.AllowGet)
ElseIf TempData("UserName").ToString().ToLower() = UserName.ToLower() Then
Return Json(True, JsonRequestBehavior.AllowGet)
Else : Return Json(False, JsonRequestBehavior.AllowGet)
End If
End Function
<HttpPost>
<AllowAnonymous>
Function SetTempData(ByVal name As String)
TempData("UserName") = name
End Function
<script type="text/javascript">
function ResetTempData() {
var url = "/User/SetTempData";
var TDname = "@ViewBag.UserName"
$.post(url, { name: TDname});
};
$('#UserName').change(ResetTempData);
</script>