2011-12-26 65 views
0

我有一類的領域之一遠程驗證:遠程驗證在MVC3.0

[Remote("IsCityUnique", "City", AdditionalFields = "Onvan", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")] 
    public string CityName 
    { 
     get { return _CityName; } 
     set 
     { 
      if (_CityName != value) 
      { 
       _CityName = value; 
       OnPropertyChanged("CityName"); 
      } 
     } 
    } 
    private string _CityName; 

在我的控制器:

public JsonResult IsCityUnique(string Cityname) 
    { 
     .... 
     List<City> citylist = cr.GetAll().ToList(); 
     return Json(!citylist .Any(c => c.CityName== Cityname)); 
    } 

的「IsCityUnique」將正確觸發,但編輯&創建的驗證方法是不同的。當我處於創建模式或編輯模式時,如何激發適當的方法?我想如果我可以將action名稱傳遞給這個方法,那麼我可以管理它。但是我不知道如何將action名稱傳遞給遠程方法。否則,你能建議我一個合適的方法嗎?

+0

可能的重複[MVC 3遠程驗證,重複檢查在編輯視圖中的問題](http://stackoverflow.com/questions/7078075/mvc-3-remote-validation-problem-with-duplicate-check-in -edit-view) – 2011-12-26 11:50:06

+0

這是非常愚蠢的方式,因爲一個方法,單獨的控制器類!!!有沒有辦法? – Shayan 2011-12-26 11:52:45

+0

調用解決方案「非常愚蠢」通常不是獲得幫助的最佳方式。 – 2011-12-26 12:49:20

回答

1

因此,雖然我還是會建議使用獨立的視圖模型進行編輯和創建,這已經不僅僅是遠程驗證的詳細架構優勢,你應該能夠做到你想要使用AdditionalFields財產,什麼,你似乎可以用在屬性中但不在您的驗證處理程序中。

我不是在一個位置進行測試,但如果你真的做這樣子的話,你也許可以做到這一點如下:

要在您的視圖模型添加:

public bool IsEditing { get; set; } 

當您處於編輯操作時,將其設置爲true(並且在創建操作中爲false)。

[Remote("IsCityUnique", "City", AdditionalFields = "IsEditing", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")] 
public string CityName { get; set; } 

在你看來,你可能要呈現@Html.HiddenFor(m=>m.IsEditing),然後你的驗證處理程序應該成爲:

public JsonResult IsCityUnique(string Cityname, bool IsEditing) 
{ 
    if(editing) { /* Do editing Logic */ } 
    else { /* Do other logic. */ } 
} 

像這樣的東西應該工作,但我不是在位置現在測試它。但是,你真的可能會更好地觀察問題的分離並找出如何在編輯和創建域對象之間劃分責任。

+0

非常感謝。這是一個很好的方法和完整的解決方案。 – Shayan 2011-12-28 06:13:52

+0

@Shayan這是 - 如果你想忽略'爲什麼'你有兩個視圖模型,基本上每個人都推薦這裏。 – 2011-12-28 22:26:53

+0

我看到亞當,並感謝您的迴應。 – Shayan 2011-12-29 06:31:22

1

使用兩種視圖模型,每種視圖模型都具有不同的屬性名稱及其適用的遠程驗證方法。這是簡單地爲每個視圖使用視圖模型的另一個原因。所以你應該有一個創建和編輯的視圖模型。