MVC2 выдает при редактировании элемента в текстовом поле для - PullRequest
2 голосов
/ 27 августа 2010

У меня есть эта модель на 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>

ByНа данный момент, на всякий случай, я создал метод расширения для 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 Ответ

1 голос
/ 29 августа 2010

Может быть, вы могли бы использовать эту модель?

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

Не требуется никаких связующих и методов расширения.

...