加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC3 EditorFor动态属性(或需要解决方法)

发布时间:2020-12-16 06:46:03 所属栏目:asp.Net 来源:网络整理
导读:我正在构建一个系统,提出问题并收到答案.每个问题都可以有一个自己类型的aswer.我们暂时将它限制为String和DateTime.在Domain中,问题以下列方式表示: public class Question{ public int Id { get; set; } public string Caption { get; set; } public Answ
我正在构建一个系统,提出问题并收到答案.每个问题都可以有一个自己类型的aswer.我们暂时将它限制为String和DateTime.在Domain中,问题以下列方式表示:

public class Question
{
    public int Id
    {
        get;
        set;
    }

    public string Caption
    {
        get;
        set;
    }

    public AnswerType
    {
        get;
        set;
    }
}

,其中AnswerType是

enum AnswerType
{
    String,DateTime
}

请注意,实际上我有更多的答案类型.

我提出了创建MVC模型的想法,从Question派生并向其添加Answer属性.所以它必须是这样的:

public class QuestionWithAnswer<TAnswer> : Question
{
    public TAnswer Answer
    {
        get;
        set;
    }
}

在这里开始出现问题.我希望有一个通用的视图来绘制任何问题,所以它需要是这样的:

@model QuestionWithAnswer<dynamic>

<span>@Model.Caption</span>
@Html.EditorFor(m => m.Answer)

对于String我想在这里有简单的输入,对于DateTime我将定义我自己的视图.我可以从控制器传递具体模型.但问题是在渲染阶段,自然地,它无法确定Answer的类型,特别是如果它最初为null(String的默认值),因此EditorFor不为String提取任何内容,也不为DateTime中的所有属性输入.

我确实理解问题的本质,但有没有优雅的解决方法?或者我必须实现我自己的逻辑来选择基于控件类型(大丑开关)的编辑器视图名称?

解决方法

您仍然可以使用Html.EditorFor(..),但指定第二个参数,它是编辑器模板的名称.你在Question对象上有一个属性是AnswerType,所以你可以做类似……

@Html.EditorFor(m => m.Answer,@Model.AnswerType)

EditorTemplates文件夹中的每个AnswerTypes都定义了一个视图.即“字符串”,“日期时间”等.

编辑:只要Answer对象为String为null,我会在其中放置一个占位符对象,因此“String”编辑器模板中的模型不为null.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读