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 属性确实被实例化,但它只包含一项,即输入到 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 回答