2014-10-29 95 views
3

我需要在表單上顯示一組問題,可能有一個問題或多個問題,並且問題的答案可能是不同類型的(例如,年齡,姓名,出生日期等)。更改模型上的屬性類型MVC

到目前爲止我已經設法想出一種觀點型號:

public class QuestionViewModel 
{ 
    public List<QuestionType> Questions { get; set; } 
} 

它顯示類型QuestionType的列表:

public class QuestionType 
{ 
    public int QuestionID { get; set; } 
    public string Question { get; set; } 
    public string Answer { get; set; } 
} 

我需要知道的是,是有可能在屬性上指定一些可以讓我改變類型的東西?我覺得這是不可能的,所以失敗了,是否有任何建議,我該如何處理這個問題,儘量保持與MVC內聯?

我想這樣做的原因是,它會掛鉤到默認的MVC框架驗證中,並將其驗證爲正確的類型,例如在詢問「年齡」的問題中寫入「Hello」。

我有一種解決方法的想法,如果其中I存儲在模型中的類型信息因此它是不可能的:

public class QuestionType 
{ 
    public int QuestionID { get; set; } 
    public string Question { get; set; } 
    public string Answer { get; set; } 
    public string TypeInfo { get; set; } 
} 

,並使用存儲在那裏編寫自定義驗證邏輯的信息。

+1

當你說變型你的意思是一個字符串爲int或類似的類別開關在這種情況下,你可以看''Enums''。 – 2014-10-29 15:38:18

+0

我的意思是說,例如問題出現了,它是「你叫什麼名字?」我想我的Answer屬性的類型是一個字符串。如果問題出現了,那麼「你的年齡是多少?」我希望我的Answer屬性是一個整數。我基本上希望mvc有辦法做到這一點,而不必做一個解決方法,如果需要,我已經做好了充分的準備。 – Enbern 2014-10-29 15:39:47

+0

您是否嘗試過使用DataAnnotation正則表達式?這不會改變每種說法的類型,但它可以讓您驗證輸入,而無需直接更改模型。 IE瀏覽器的年齡,你設置RegEx查找唯一的數字,其他任何事情都會引發錯誤 – 2014-10-29 15:41:15

回答

2

你的答案屬性更改爲一個對象:

public class QuestionType 
{ 
    public int QuestionID { get; set; } 
    public string Question { get; set; } 
    public object Answer { get; set; } 
} 

使用對象:

public void HandleAnswer(QuestionType qt) 
{ 
    if (qt.Answer is Boolean) 
    { 
     //do boolean stuff 
    } 
    else if (qt.Answer is String) 
    { 
     //do string stuff 
    } 
    else if (qt.Answer is Int32) 
    { 
     //do int stuff 
    } 

    //do unknown object stuff 

} 
+0

我打算把這個標記爲答案,並提供這個鏈接:http://stackoverflow.com/questions/11486286/asp-net-mvc-3-editor-for-dynamic-property這是給我的用戶CSharper。通過使用這兩者的組合,它允許我轉換類型,以便接收默認的客戶端驗證,並使用類似於您的方法的方法來執行服務器端檢查。非常感謝。 – Enbern 2014-10-31 09:27:59