9

ASP.NET MVC UpdateModel を使用して次のことを行うにはどうすればよいですか? スペースで区切られたテキスト ボックス データ (このような新しい StackOverflow の質問の TAGS テキスト ボックスとまったく同じ) をモデルに読み込もうとしています。

例えば。

<input type="Tags" type="text" id="Tags" name="Tags"/>

...

public class Question
{
    public string Title { get; set; }
    public string Body { get; set; }
    public LazyList<string> Tags { get; set; }
}

....

var question = new Question();
this.UpdateModel(question, new [] { "Title", "Body", "Tags" });

Tags プロパティはインスタンス化されますが、これには 1 つの項目しか含まれません。これは、Tags 入力フィールドに入力されたデータ全体です。リストに単一のアイテムが必要な場合(スペースを介して文字列を分割することに基づいて)..これを処理するベストプラクティスは何ですか?

乾杯!

4

1 に答える 1

8

あなたがする必要があるのは、DefaultValueProvider を独自のものに拡張することです。値プロバイダーで GetValue(name) を拡張してタグを分割し、LazyList にロードします。また、UpdateModel への呼び出しを変更する必要があります。

UpdateModel(q, new[] { "Title", "Body", "Tags" }, 
   new QuestionValueProvider(this.ControllerContext));

私が書いた QuestionValueProvider は次のとおりです。

 public class QuestionValueProvider : DefaultValueProvider
    {
        public QuestionValueProvider(ControllerContext controllerContext)
            : base(controllerContext)
        {
        }
        public override ValueProviderResult GetValue(string name)
        {
            ValueProviderResult value = base.GetValue(name);
            if (name == "Tags")
            {
                List<string> tags = new List<string>();
                string[] splits = value.AttemptedValue.Split(' ');
                foreach (string t in splits)
                    tags.Add(t);

                value = new ValueProviderResult(tags, null, value.Culture); 
            }
            return value;
        }
    }

お役に立てれば

于 2008-11-12T10:24:56.870 に答える