【问题标题】:MVC2 issues when edit an item on an textboxfor编辑文本框上的项目时出现 MVC2 问题
【发布时间】:2010-08-27 08:22:56
【问题描述】:

我在 mvc 上有这个模型:

public class User
{
    public string Name
    {
      get;
      set;
    }
    public IList<string>RelatedTags
    {
      get;
      set;
    }
}

和下面的类型化视图(用户)编辑一个添加用户(AddEdit.aspx视图):

<div>
   <%: Html.LabelFor(e => e.Name)%>
   <%: Html.TextBoxFor(e => e.Name)%>
   <%: Html.ValidationMessageFor(e => e.Name)%>
</div>
<div>
   <%: Html.LabelFor(e => e.RelatedTags)%>
   <%: Html.TextBoxFor(e => e.RelatedTags)%>
   <%: Html.ValidationMessageFor(e => e.RelatedTags)%>
</div>

另一方面,我有一个“RelatedTags”字段。我需要(在动作控制器端)与我添加的用户相关的标签列表。出于这个原因,我创建了一个自定义模型绑定器(获取文本框的字符串并将其作为列表传递):

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
   List<string> listoftags = bindingContext.ValueProvider.GetValue("RelatedTags").AttemptedValue.Split(',').ToList<string>();
     return listoftags;
}

实际上我可以使用 AddEdit.aspx 添加一个新用户(在控制器端我得到一个相关标签的列表,但是当我编辑一个用户时,我不知道在哪里可以将此列表转换为逗号字符串,或者我不知道应该更改视图上的这些行:

<div>
       <%: Html.LabelFor(e => e.RelatedTags)%>
       <%: Html.TextBoxFor(e => e.RelatedTags)%>
       <%: Html.ValidationMessageFor(e => e.RelatedTags)%>
</div>

目前,以防万一,我为 IList 创建了一个扩展方法:

public static class Extensions
    {
        public static string ToCommaString<T>(this IList<T> input)
        {
            StringBuilder sb = new StringBuilder();
            foreach (T value in input)
            {
                sb.Append(value);
                sb.Append(",");
            }
            return sb.ToString();
        }
    }

当我在编辑用户时,你能帮我在输入字段中看到一个用逗号分隔的字符串与列表的所有元素吗?

非常感谢。

最好的问候。

何塞。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 lambda extension-methods


    【解决方案1】:

    也许你可以使用这个模型?

    public class UserModel
    {
        public string Name { get; set; }
        protected IList<string> RelatedTagsList { get; set; } 
        public string RelatedTags
        {
            get
            {
                return string.Join(",", RelatedTagsList.ToArray());
            }
    
            set
            {
                RelatedTagsList = value.Split(',').ToList();
            }
        }
    }
    

    不需要活页夹和扩展方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多