【问题标题】:ASP.NET MVC3 Html.EditorFor and property of type objectASP.NET MVC3 Html.EditorFor 和对象类型的属性
【发布时间】:2011-07-26 21:52:10
【问题描述】:

我正在 MVC3 应用程序中创建用户控件。我的视图模型如下所示:

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

Value 属性可以是 int、string 或 bool,所以我不能使用 [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 呈现复选框输入:

我做了一些研究,但目前我没有找到解决方案。

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    不是一个直接的答案,但你不能让你的 ViewModel 通用:

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

    这样,Html 辅助方法可以在编译时准确解析出什么类型的值,以及准确呈现哪个编辑器。

    【讨论】:

    • 这是一个简化的例子。在真正的应用程序中,我有通用类型 - 就像你说的那样。但我需要能够创建MyViewModel 的列表。如您所知,我无法创建泛型类型列表,因此我创建了接口 (IMyViewModel),其属性为对象类型 Value
    【解决方案2】:

    我用过:

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

    代替:

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

    一切都很好!正在为空字符串或 int 值呈现文本框。表达式p =&gt; p.Value有什么问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2011-06-23
      • 2011-03-20
      相关资源
      最近更新 更多