0

ViewBag のビューに渡すリストがあります。

public ActionResult ContactUs()
    {
        List<SelectListItem> reasons = new List<SelectListItem>();
        reasons.Add(new SelectListItem
        {
            Selected = true,
            Text = "Billing/Payment question",
            Value = "Billing/Payment question"
        });
        reasons.Add(new SelectListItem
        {
            Text = "Complaint",
            Value = "Complaint"
        });

        ViewBag.reasons = reasons;
        return View();
    }

[HttpPost]
public ActionResult ContactUs(ContactUs form)
{
    //some code
    return View("ContactUs");
}

モデル:

[Required]
public String Reason { get; set; }

ビュー:

@model #####.ViewModels.ContactUs
@using (Html.BeginForm("ContactUs","Home", FormMethod.Post))
{
   @Html.DropDownListFor(Model => Model.Reason,  (IEnumerable<SelectListItem>) ViewBag.reasons);
}

ViewBag.reasons から dropdownlist 、おそらく DropDownList("reasons") (これを記述するより良い方法である必要があります) を作成し、選択した値をプロパティ String Reason としてモデルに渡す必要があります。DropDownList/DropDownListFor の使用について混乱しています。ありがとう!

4

1 に答える 1

7

モデル:

public class MyModel
{
    [Required]
    public String Reason { get; set; }
}

コントローラ:

public ActionResult Index()
{
    var reasons = new List<SelectListItem>();
    reasons.Add(new SelectListItem
    {
        Selected = true,
        Text = "Billing",
        Value = "Billing"
    });
    reasons.Add(new SelectListItem
    {
        Text = "Complaint",
        Value = "Complaint"
    });
    ViewBag.reasons = reasons;
    return View(new MyModel());
}

意見:

@model MyModel
...
@Html.DropDownListFor(
    x => x.Reason, 
    (IEnumerable<SelectListItem>)ViewBag.reasons,
    "-- select a reason --"  
)

ただし、ViewBag を取り除き、実際のビュー モデルを使用することをお勧めします。

public class MyViewModel
{
    [Required]
    public string Reason { get; set; }

    public IEnumerable<SelectListItem> Reasons { get; set; }
}

次に、コントローラー アクションがビュー モデルにデータを入力し、それをビューに渡します。

public ActionResult MyAction()
{
    var reasons = new List<SelectListItem>();
    reasons.Add(new SelectListItem
    {
        Text = "Billing",
        Value = "Billing"
    });
    reasons.Add(new SelectListItem
    {
        Text = "Complaint",
        Value = "Complaint"
    });

    var model = new MyViewModel
    {
        // Notice how I am using the Reason property of the view model
        // to automatically preselect a given element in the list
        // instead of using the Selected property when building the list
        Reason = "Billing",
        Reasons = reasons
    };

    return View(model);
}

最後に、強く型付けされたビューで:

@model MyViewModel
...
@Html.DropDownListFor(
    x => x.Reason,
    Model.Reasons,
    "-- select a reason --"  
)
于 2012-04-05T19:09:56.977 に答える