0

そこで、AvailableServicesSelectedServicesの 2 つの ListBox を含むビューを作成しました。

                @Html.ListBoxFor(x => x.AvailableServices, Enumerable.Empty<SelectListItem>(), new { id = "serviceID" })
                @Html.ValidationMessageFor(model => model.AvailableServices)

                @Html.ListBoxFor(x => x.SelectedServices, Enumerable.Empty<SelectListItem>(), new { id = "selectedserviceID" })
                @Html.ValidationMessageFor(model => model.SelectedServices)

参考までに、ここに私のViewModelがあります:

namespace Services.ViewModels
{
public class SPServiceTypeViewModel
{
    public int Id { get; set; }
    public int SPCompanyAccountID { get; set; }

    [Display(Name = "Service Category")]
    public IEnumerable<SelectListItem> ServiceCategory { get; set; }

    [Display(Name = "Available Services")]
    public IEnumerable<SelectListItem> AvailableServices { get; set; }

    [Display(Name = "Your Services")]
    public IEnumerable<SelectListItem> SelectedServices { get; set; }
}
}

私のコントローラーは、AvailableServices ListBox に問題なくデータを入力します。また、ユーザーが項目 ( idlabelを含む) をAvailableServices ListBox からSelectedServicesリストボックスに移動できるようにする JavaScript をいくつか作成しました。そこも問題ありません。

ここに私の問題があります...さまざまな投稿を読みましたが、 IDラベルの両方をキャプチャする必要があるため、フォーム送信時にSelectedServices ListBox からコントローラーにデータを戻す最良の方法をまだ理解していませんそれぞれの選択。

ここでの私の目標は、SPServiceTypeテーブルに、SelectedServices ListBox の各項目に対して新しいデータベース行を作成することですが、私にはわかりません。現在、データを保存するためのコントローラーは次のようになっています。

[HttpPost]
    public ActionResult Create(SPServiceTypeViewModel viewModel)
    {
    foreach (var item in viewModel.SelectedServices)
           {
               var spServiceType = new SPServiceType
               {
                   SPCompanyAccountId = viewModel.SPCompanyAccountID,
                   ServiceCategory = ???,
               };
               db.SPServiceType.Add(spServiceType);
               db.SaveChanges();

        return RedirectToAction("Create", "SPServiceLocation");
    }

ViewModel で IEnumerable を使用する必要はありませんか? モデル バインディングを簡単に実行できるように、送信前にJavaScript を使用してSelectedServices値を非表示の List<> に渡す必要がありますか?

繰り返しますが、選択範囲のidlabelの値を取得したいと思います。

ビュー内でこれにアプローチする方法に関するコード例、またはコントローラーの Post アクション、または一般的なアプローチのアドバイスをいただければ幸いです。

4

1 に答える 1

0

ここで同様の質問がありました

当時の推奨事項は、POST で選択された値を受け入れ、必要に応じて値をラベルに変換するためにリポジトリ パターン (必要に応じてキャッシュ) を使用することでした。

于 2012-08-22T16:38:37.317 に答える