当前位置:  开发笔记 > 后端 > 正文

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

如何解决《带有sorta复杂数据输入字段的ASP.NETMVCUpdateModel》经验,为你挑选了1个好方法。

我如何使用ASP.NET MVC UpdateModel执行以下操作?我正在尝试将空间分隔的文本框数据(与新的StackOverflow问题中的TAGS文本框完全相同,如此)读入模型中.

例如.



...

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

....

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

Tags属性确实被实例化,但它只包含一个项目,即输入到Tags输入字段的整个数据.如果我想在列表中有一个项目(基于通过空格拆分字符串)..最好的做法是什么来处理这个,好吗?

干杯!



1> John Oxley..:

您需要做的是将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 tags = new List();
                string[] splits = value.AttemptedValue.Split(' ');
                foreach (string t in splits)
                    tags.Add(t);

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

希望这可以帮助


自RC以来,DefaultValueProvider不再存在,另一种方法是更改​​控制器附带的ValueProvider,它只是一个IDictionary .请参阅:http://forums.asp.net/t/1382242.aspx
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有