2010-08-27 54 views
2

我對MVC這種模式:MVC2的問題時,編輯上的textboxfor項目

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

你可以給我任何幫助,當編輯用戶在輸入字段中看到用逗號分隔的字符串與列表中的所有元素?

非常感謝。

最好的問候。

何塞。

回答

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

無需粘合劑和擴展方法。

+0

非常感謝! 此致敬禮。 何塞 – Sosi 2010-08-30 06:19:06