2012-07-20 109 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

相关问题