Trying to use EditorFor with an ICollection

2019-05-07 15:54发布

问题:

I'm trying to display a class object in a Create view, where a property is an ICollection<string>.

For example...

namespace StackOverflow.Entities
{
    public class Question
    {
        public int Id { get; set; }
        ....
        public ICollection<string> Tags { get; set; }
    }
}

and if the view was like a StackOverflow 'ask a question' page, where the Tags html element is a single input box .. I'm not sure how I could do that in an ASP.NET MVC3 view?

Any ideas?

I tried using EditorFor but nothing was displayed in the browser, because it's not sure how to render a collection of strings.

回答1:

Start by decorating your view model with the [UIHint] attribute:

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

    [UIHint("tags")]
    public ICollection<string> Tags { get; set; }
}

and then in the main view:

@model StackOverflow.Entities.Question
@Html.EditorFor(x => x.Tags)

and then you could write a custom editor template (~/Views/Shared/EditorTemplates/tags.cshtml):

@model ICollection<string>
@Html.TextBox("", string.Join(",", Model))

or if you don't like decorating, you could also specify the editor template to be used for the given property directly in the view:

@model StackOverflow.Entities.Question
@Html.EditorFor(x => x.Tags, "tags")