2012-07-20 102 views
1

我正在嘗試創建一個具有TextAreaFor電子郵件地址的表單。電子郵件地址存儲在數據庫中。我希望這些存儲的地址是該字段的默認值,然後允許用戶在他們認爲合適的地方添加或刪除列表中的地址。將輸入字段綁定到列表

我的viewModel;

public List<string> EmailAddresses { get; set; } 

筆者認爲:

<%= Html.TextAreaFor(m => m.EmailAddresses) %> 

(這是錯誤的,因爲它顯示System.Collections.Generic.List 1 [System.String]`在輸入字段,而不是在列表中每個項目

我。知道我可以遍歷列表併爲列表中的每個元素顯示單獨的文本框,但我希望每個元素都列在一個textArea中(類似於實際的電子郵件客戶端,因爲您可以輸入多個地址,用逗號分隔)或半)這是可能的嗎? 我已經搜索過,但還沒有找到這種情況,這看起來很奇怪,因爲我認爲它不一定是罕見的。 我在想這個解決方案可能是編寫一個自定義的編輯器模板,但我希望有一個更簡單的解決方案。

+0

<%= Html.TextAreaFor(m => string.Join(「,」,m.EmailAddresses.ToArray());)%> – Asdfg 2012-07-20 19:13:55

+0

@Asdfg即使在刪除額外的; ...謝謝,雖然 – 2012-07-20 20:08:19

回答

1

你可以像這樣擴展你的視圖模型。

視圖模型 公共類PeopleViewModel {

public List<string> EmailAddress { get; set; } 

    public string EmaiAddressString { 
     get { 
      string rValue = string.Empty; 
      EmailAddress.ForEach(x => rValue += (x + "\n")); 
      return rValue; 
     } 
     set { 
      var newValue = value.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList<string>(); 
      EmailAddress = newValue; 
     } 

    } 
} 

查看

@model SigKoExample.Models.PeopleViewModel 
@{ 
    ViewBag.Title = "Index"; 
} 
<h2>Index</h2> 
@if (IsPost) { 
    <h2>New Values</h2> 
    @Html.TextArea("EmailAddresses", Model.EmaiAddressString.ToString()) 
} else { 
    using (Html.BeginForm()) { 
     @Html.TextAreaFor(m => m.EmaiAddressString) 
     @Html.HiddenFor(m => m.EmailAddress) 
     <input type="submit" value="Save" />        
    } 
} 

控制器

public ActionResult Index() { 
    PeopleViewModel model = new PeopleViewModel { 
     EmailAddress = new List<string> { 
      "ValueOne", 
      "ValueTwo" 
     } 
    }; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(PeopleViewModel model) { 
    return View(model); 
} 
+0

完美答案。我一開始並不接受它,因爲我得到了一些愚蠢的錯誤,然後我意識到這是我的錯,不是你的:)謝謝@anAgent! – 2012-07-20 20:20:05

1

我會在MVC中使用listboxfor而不是文本區域。通過這種方式,您可以選擇列表中的單個條目,並通過單擊按鈕並重定向到另一個頁面或在同一頁面上添加要添加的文本框來編輯,刪除或添加到該列表。看看這個例子。 http://www.aspnetmvcninja.com/views/asp-net-mvc-select-list-example

此外,如果您想要將大量數據輸入到單個測試區域,然後添加到列表中,請嘗試在「,」上使用TryParse來分隔電子郵件地址。然後將它們添加到列表中。

+0

謝謝@Clay。不完全是我所描繪的,但它的工作原理和滿足要求。 '嫉妒它! – 2012-07-20 20:09:24

相關問題