1

TextAreaFor メールアドレスを持つフォームを作成しようとしています。データベースに格納されている電子メール アドレスがあります。これらの保存されたアドレスをフィールドのデフォルト値にして、ユーザーが必要に応じてリストからアドレスを追加または削除できるようにします。

私のviewModel;

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

私の見解:

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

System.Collections.Generic.List(リスト内の各項目ではなく、入力フィールドに 1[System.String]` が表示されるため、これは間違っています。

リストを繰り返し処理して、リスト内の要素ごとに個別のテキスト ボックスを表示できることはわかっていますが、各要素を 1 つの textArea にリストする必要があります。(コンマまたはセミで区切られた複数のアドレスを入力できるという点で、実際の電子メール クライアントに似ています) これは可能ですか? 検索しましたが、このシナリオは見つかりませんでした。これは奇妙に思えます。珍しいことではないと思うからです。解決策はカスタムのeditorTemplateを書くことかもしれないと思っていますが、もっと簡単な解決策を望んでいます。

4

2 に答える 2

1

ビューモデルをそのように拡張できます。

ビュー モデル public class 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);
}
于 2012-07-20T19:34:56.780 に答える
1

テキスト領域の代わりに、MVC で listboxfor を使用します。このようにして、リスト内の個々のエントリを選択し、ボタンをクリックして別のページにリダイレクトするか、同じページに追加したいテキストボックスを配置することで、そのリストを編集、削除、または追加できます。この例を確認してください。http://www.aspnetmvcninja.com/views/asp-net-mvc-select-list-example

また、1 つのテスト領域に大量に入力してからリストに追加する場合は、"," で TryParse を使用してメール アドレスを区切ってみてください。次に、それらをリストに追加します。

于 2012-07-20T19:17:41.833 に答える