2011-05-26 42 views
0

我意識到這個問題已經被詢問了很多次。然而,沒有任何解決方案爲我工作。MVC 3對象不能正常工作的遠程驗證

問題:

我有一個對象:

public class SomeObject 
{ 
    [Remote("MyAction", "MyController")] 
    public DateTime MyDate { get; set; } 
} 

和模型:

public class SomeModel 
{ 
    public SomeObject MyObject { get; set; } 
} 

和我的行動:

public JsonResult MyAction(DateTime MyDate) 
{ 
    //do some validation here 
} 

當驗證踢,因爲它是一個comp法對象發送一個URL是這樣的:

http://localhost/MyController/MyAction?MyObject.MyDate=xxxxxxxx 

顯然,這意味着我的行動不會拿起日期,因爲參數名稱不匹配的查詢字符串名稱。

我已經搜索了很多,並看到很多建議 - 所有我已經嘗試過但沒有工作。以下是我的嘗試:

使用綁定屬性

public JsonResult MyAction([Bind(Prefix = "MyObject")]DateTime MyDate) 

public JsonResult MyAction([Bind(Prefix = "MyObject.MyDate")]DateTime MyDate) 

日剛回來爲空

使用模型或對象作爲參數類型

public JsonResult MyAction(SomeObject myObject) 

public JsonResult MyAction(SomeModel myModel) 

MyDate最終總是爲MINVALUE,但參數(SomeModel或SomeObject)不是空

我不太清楚我在做什麼錯。任何人都可以將我指向正確的方向嗎?在跑步之前有沒有什麼咒語,或者是外面晴朗嗎?這似乎是比預期更普遍的情況下更多的工作。

+0

我要指出,我看到了解決方案,你可以使用'請直接訪問它的查詢字符串[「...」]'但我想避免使用魔術字符串。 – 2011-05-26 05:32:24

+0

我還應該注意日期是可解析的 - 如果我通過'Request'方法獲取日期並解析它,它可以正常工作 – 2011-05-26 05:35:04

回答

0

所以事實證明,問題不是我認爲的那樣。問題在於jQuery UI Datepicker,它將PREVIOUS值發送到動作和我的文化設置。 datepicker的格式爲dd/MM/yy,但MVC試圖將其解釋爲美式MM/dd/yy,即使DateTime.Parse正確解析它。這就是日期返回爲null的主要原因。我將圍繞這兩個問題撰寫問題。

至於解決 - 使用下面的實際執行工作:

public JsonResult MyAction(SomeObject myObject)