2010-01-04 59 views
0

我得到以下InvalidOperationException異常:MVC2:不能將字符串轉換爲ExtensionDataObject(不知道我想)

The parameter conversion from type 'System.String' to type 'System.Runtime.Serialization.ExtensionDataObject' failed because no type converter can convert between these types. 

在我的ASP.Net MVC2頁面上張貼的動作,但我真的不知道它指的是什麼。我使用的數據註釋驗證:

public class FamilyPersonMetadata 
{ 
    [Required(ErrorMessage = "Name Required")] 
    public String Name; 

    [Required(ErrorMessage = "Date of Birth required")] 
    [DateTime(ErrorMessage = "Invalid Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")] 
    public DateTime DateOfBirth; 
} 

[MetadataType(typeof(FamilyPersonMetadata))] 
public partial class FamilyPerson 
{ 
} 

而從用的ViewPage的FamilyPerson亞型我的觀點inhertis。我只是使用與FamilyPerson相匹配的名稱創建控件,然後提交表單,但由於某種原因,我的ModelState無效,上述錯誤顯然是原因。對於錯誤的性質我很困惑。類似的代碼適用於其他視圖和操作。

有人能指點我的事情的方向看,可能會導致這種情況嗎?

+0

如果您註釋掉MetadataType屬性,會發生什麼情況?一切正常嗎?嘗試並消除此問題中的某些變量將會有所幫助。 – Eilon 2010-01-09 21:07:54

回答

0

它似乎已經消失在了自己。奇怪的。

2

關於[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d")]

"{0:d"應該"{0:d}"

+0

好的。可悲的是,我在改變之後仍然會遇到同樣的例外情況。 – 2010-01-04 21:23:53

0

這可以幫助別人:

我有此異常被拋出,因爲我已經在我看來mulitiple形式。

但是其中一種形式沒有明確設置'action'屬性。也就是說,我用這個構造:

@using (Html.BeginForm()) 

而是這一個:

@using (Html.BeginForm("ACTION_METHOD", "CONTROLLER", FormMethod.Post, null)) 

這將導致不正確的參數被張貼與形式。簡而言之,商業模式對象被包含在窗體上時,它不應該。反過來,.Net然後試圖將System.String轉換爲業務模型對象,當它不應該嘗試這樣的轉換。

解決方法是使用稍後重載的方法,並確保在回發時爲您的窗體設置了正確的'action'屬性。

供參考:檢查你的表單的'action'屬性,使用FireBug並檢查HTML,找到Form元素,'action'屬性將會出現在那裏,所有參數將被髮回給serber該表單已提交。