1

タグのリストを含む申請者モデルがあります。

public class Applicant
{
    public virtual IList<Tag> Tags { get; protected set; }
}

フォームが送信されると、ユーザーが入力したタグのコンマ区切りリストを含む入力フィールドがあります。このリストをコレクションに変換するカスタム モデル バインダーがあります。

public class TagListModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var incomingData = bindingContext.ValueProvider.GetValue("tags").AttemptedValue;
        IList<Tag> tags = incomingData.Split(',').Select(data => new Tag { TagName = data.Trim() }).ToList();
        return tags;
    }
}

ただし、モデルにデータが入力されて POST のコントローラー アクションに渡されると、Tags プロパティは空のリストのままです。リストに正しく入力されていない理由は何ですか?

4

3 に答える 3

2

問題は、プロパティにprotectedsetアクセサーがあることです。これを以下のようTagsに変更すると、問題なく動作します。public

public class Applicant
{
    public virtual IList<Tag> Tags { get; set; }
}
于 2012-06-28T16:56:43.837 に答える
2

モデル バインダーは、送信された値のみをバインドします。ビューにレンダリングされた値をバインドしません。

必要に応じてタグをレンダリングするには、カスタム EditorTemplate を作成する必要があります。

于 2012-06-28T15:46:47.157 に答える
1

MVC は既に Listにバインドできます。必要なことを既に実行している組み込みテクノロジを使用することをお勧めします。

バインダーの追加に関するコードに気づきませんでした。ModelBinder をバインダーに追加しましたか?

protected void Application_Start()
{
  ModelBinders.Binders.Add(typeof(IList<Tag>), new TagListModelBinder());
}
于 2012-06-28T15:56:04.923 に答える