Model view controller MVC数据库重复检查,编辑时出现问题

Model view controller MVC数据库重复检查,编辑时出现问题,model-view-controller,editing,duplication,Model View Controller,Editing,Duplication,在创建条目(比如用户名)时,我必须对数据进行某种重复检查。我就是这样做的。它是用VB编写的,不过不用麻烦了 在控制器中: 在模型中: 并在视图中使用标准JS验证库 它真的很好用。。。创建时。问题是,编辑时不能保存相同的用户名,因为客户端验证是禁止的。。因为它已经存在于数据库中。如何对当前的“用户名”进行验证,但对其他用户名进行验证。或者,应该使用自定义JS和从模型中删除的[remote]来重做。谢谢我自己找到了解决问题的办法。如果有人需要,我会把它寄出去。这不是很漂亮,但很好用。 我所做的是,当

在创建条目(比如用户名)时,我必须对数据进行某种重复检查。我就是这样做的。它是用VB编写的,不过不用麻烦了

在控制器中:

在模型中:

并在视图中使用标准JS验证库


它真的很好用。。。创建时。问题是,编辑时不能保存相同的用户名,因为客户端验证是禁止的。。因为它已经存在于数据库中。如何对当前的“用户名”进行验证,但对其他用户名进行验证。或者,应该使用自定义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>