2012-12-22 25 views
0

我在MVC3中閱讀了這個有用的示例http://msdn.microsoft.com/en-us/library/gg508808%28v=vs.98%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2進行遠程驗證,當我創建一個新項目時它很有用;但是,當我嘗試編輯新創建的項目時,我遇到了麻煩。在MVC3中如何對Edit動作執行遠程驗證?

我有這樣

Imports System.ComponentModel 
Imports System.ComponentModel.DataAnnotations 
Imports System.Web.Mvc 
Imports System.Collections.Generic 

Public Class Language 

    Public Property LanguageId As Integer 

    <Display(Name:="DisplayNameLanguageName", ResourceType:=GetType(Resources.Language)), 
     Required(ErrorMessageResourceName:="ErrorMessageLanguageNameRequired", ErrorMessageResourceType:=GetType(Resources.Language)), 
     StringLength(20), 
     Remote("IsNameAvailable", "Language", "AdminArea", ErrorMessageResourceName:="ErrorMessageNameNotAvailable", ErrorMessageResourceType:=GetType(Resources.Language))> 
    Public Property Name As String 

    Public Property Flag as String  
End Class 

在控制器的「語言」類我有一個模型......

'OutputCache needed for remote validation 
    <OutputCache(Location:=OutputCacheLocation.None, NoStore:=True)> 
    Public Class LanguageController 
     Inherits System.Web.Mvc.Controller 

     Private db As StoreEntities = New StoreEntities 

     'remote validation for duplicates 
     Public Function IsNameAvailable(Name As String) As JsonResult 
      Return Json(Not db.Languages.Any(Function(x) x.Name = Name), JsonRequestBehavior.AllowGet) 
     End Function 

[...] 

從查看「Create.vbhtml」,我可以創造一個新的語言,但從「Edit.vbhtml」我不能編輯只有標誌屬性留下相同的值的名稱,因爲驗證開始。我不得不改變Name屬性。

我該如何解決這個問題?

回答

0

我解決了這個問題增加一個隱藏字段「HiddenName」的語言作爲Edit.vbhtml查看值的名稱,即可驗證功能的控制器這樣

Public Function IsNameAvailable(Name As String, Optional HiddenName As String = "") As JsonResult 
    If Name <> HiddenName Then 
     Return Json(Not db.Languages.Any(Function(x) x.Name = Name), JsonRequestBehavior.AllowGet) 
    Else 
     Return Json(True, JsonRequestBehavior.AllowGet) 
    End If 
End Function