【问题标题】:ASP.NET MVC UpdateModel with a sorta complex data entry field具有复杂数据输入字段的 ASP.NET MVC UpdateModel
【发布时间】:2008-11-12 06:28:47
【问题描述】:

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

干杯!

【问题讨论】:

    标签: asp.net-mvc updatemodel


    【解决方案1】:

    您需要做的是将 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;
            }
        }
    

    希望对你有帮助

    【讨论】:

    • 是的!当然可以!现在我想知道是否值得这样做,而不是仅仅使用“title”和“body”做一个 UpdateModel,然后在我调用 Request["Tags"] 并拆分之后手动设置 Tags 属性?跨度>
    • @John - 只是为了继续这个线程,当我将 添加到 html 时,它现在使用 System.Collections.Generic 自动完成文本框。列表`1 [Foo.Models.Tag]。首先,它是一个字符串惰性列表,而不是我的其他自定义标记类之一。我该如何解决这个问题?
    • 这个解决方案现在是否与当前的 MVC RC2 过时了?
    • DefaultValueProvider 自 RC 以来不再存在,替代方法是更改​​控制器附带的 ValueProvider,它只是一个 IDictionary。见:forums.asp.net/t/1382242.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多