2011-07-26 45 views
1

我在MVC3應用程序中創建用戶控件。我的視圖模型看起來像這樣:ASP.NET MVC3 Html.EditorFor和對象類型的屬性

public class MyViewModel 
{ 
    public object Value { get; set; } 
} 

Value屬性可能是int,字符串或布爾值,所以我不能用[DataType]屬性。

當我創建我的視圖模型:

var viewModel = new MyViewModel { Value = "" }; 

var viewModel = new MyViewModel { Value = 1 }; 

我認爲這個代碼:

<%: Html.EditorFor(p => p.Value) %> 

應該呈現類型文本框的HTML輸入。不幸的是沒有呈現。

當我使用bool值或一些非空字符串時,一切正常。這裏有一個例子:

var viewModel = new MyViewModel { Value = true }; 

Html.EditorFor呈現複選框輸入:

Value property of type bool

我做了一些研究,但現在我沒有找到解決辦法。

回答

1

我使用:的

<%: Html.Editor("Value") %> 

代替:

<%: Html.EditorFor(p => p.Value) %> 

,一切的偉大工程!該文本框正在呈現爲空字符串或整型值。表達式p => p.Value有什麼問題?

1

不是一個直接的答案,但你不能只讓你的視圖模型通用:

public class MyViewModel<T> 
{ 
    public T Value { get; set; } 
} 

這樣,HTML輔助方法可以解決在編譯時準確類型值是什麼,到底是哪編輯器渲染。

+1

這是簡化的例子。在真正的應用程序中,我有泛型類型 - 就像你說的。但我需要能夠創建'MyViewModel'列表。正如你所知我不能創建泛型類型列表,所以我創建了帶有屬性Value的object類型的接口('IMyViewModel')。 – krolik