Html.EditorFor ничего не рендерит, если я использую пользовательский объект? - PullRequest
1 голос
/ 21 февраля 2010

Похоже, что после обновления до asp.net mvc 2 rc 2 редактировать пользовательский объект больше невозможно Я использую этот подход http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html с пользовательским объектом, подобным этому:

Моя модель имеет только одно свойство, но наследует от абстрактного базового класса открытый класс Page: ContentItem { [ТипДанный (DataType.MultilineText)] публичная виртуальная строка 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 Ответ

1 голос
/ 21 февраля 2010

Возможно, было бы лучше представить это представлению в виде строки, разделенной пробелами, и исключить коллекцию из отображения в представлении.Кроме того, вы можете определить конкретный шаблон для отображения коллекции.Мне не ясно, как 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() ) );
             }
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...