带有sorta复杂数据输入字段的ASP.NET MVC UpdateModel

时间:2008-11-12 06:28:47

标签: asp.net-mvc updatemodel

如何使用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输入字段的整个数据。如果我想在列表中有一个项目(基于通过空格拆分字符串)..最好的做法是什么来处理这个,拜托?

喝彩!

1 个答案:

答案 0 :(得分: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;
        }
    }

希望这有帮助