如果我使用自定义对象,Html.EditorFor不会呈现任何内容?

时间:2010-02-21 12:56:59

标签: asp.net-mvc-2

在升级到asp.net mvc 2 rc 2后,似乎无法再编辑自定义对象了?我使用这种方法http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html和这样的自定义对象:

我的模型只有一个属性,但是继承自抽象基类 公共类页面:ContentItem {         [数据类型(DataType.MultilineText)]         public virtual string MainIntro {get; set; } //此属性呈现正确

    [DisplayFormat(NullDisplayText="(null value)")]
    public virtual DetailCollection Tags { get; set; }

}

我的控制器看起来像这样

    public ActionResult Edit(string pagePath) {
        var page = _repository.GetByUrlSegment(pagePath);
        return View(page.EditViewName, new DashboardModel(page, RootPages));
    }

我的观点看起来像这样

<% using (Html.BeginForm("update","Dashboard", FormMethod.Post, new { name = "editForm" } )) %>
<% { %>
    <div>
        <%=Html.EditorFor(model => model.CurrentItem) %>
        <div class="editor-button">
            <input type="submit" value="Save" />
        </div>
    </div>            
<% } %>

1 个答案:

答案 0 :(得分:1)

也许最好将此作为空格分隔的字符串公开给视图,并排除集合在视图中显示。或者,您可以为要显示集合的方式定义特定模板。我不清楚MVC如何能够确定显示什么。

尝试类似:

        [ShowForDisplay(false)]
        [ShowForEdit(false)]
        public virtual DetailCollection Tags { get; set; }

        public virtual string TagList
        {
             get
             {
                 if (tags == null) return "(null value)";

                 // assumes DetailCollection implements IEnumerable<string>
                 return string.Join( " ", tags.Select( t => t).ToArray() );
             }
             set
             {
                  tags = new DetailCollection( value.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries )
                                                    .Select( s => s.Trim() ) );
             }
         }