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