编辑文本框中的项目时出现MVC2问题

时间:2010-08-27 08:22:57

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

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

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

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

<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();
        }
    }

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

提前多多感谢。

最诚挚的问候。

何。

1 个答案:

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

不需要粘合剂和扩展方法。