首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择SelectListItem建模

选择SelectListItem建模
EN

Stack Overflow用户
提问于 2012-04-05 19:07:54
回答 1查看 13.9K关注 0票数 0

在ViewBag中,我有一个列表要传递给我的视图:

代码语言:javascript
复制
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");
}

型号:

代码语言:javascript
复制
[Required]
public String Reason { get; set; }

维尤:

代码语言:javascript
复制
@model #####.ViewModels.ContactUs
@using (Html.BeginForm("ContactUs","Home", FormMethod.Post))
{
   @Html.DropDownListFor(Model => Model.Reason,  (IEnumerable<SelectListItem>) ViewBag.reasons);
}

我需要创建一个下拉列表,也许是dropdownlist (“理由”)(这应该是更好的编写方法)从ViewBag.reasons中创建,并将选择的值传递给Model,作为属性字符串原因。只是对DropDownList/DropDownListFor的用法感到困惑。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-05 19:09:56

型号:

代码语言:javascript
复制
public class MyModel
{
    [Required]
    public String Reason { get; set; }
}

主计长:

代码语言:javascript
复制
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());
}

查看:

代码语言:javascript
复制
@model MyModel
...
@Html.DropDownListFor(
    x => x.Reason, 
    (IEnumerable<SelectListItem>)ViewBag.reasons,
    "-- select a reason --"  
)

但我建议您摆脱ViewBag,使用真正的视图模型:

代码语言:javascript
复制
public class MyViewModel
{
    [Required]
    public string Reason { get; set; }

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

然后控制器操作将填充视图模型并将其传递给视图:

代码语言:javascript
复制
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);
}

最后,在您的强类型视图中:

代码语言:javascript
复制
@model MyViewModel
...
@Html.DropDownListFor(
    x => x.Reason,
    Model.Reasons,
    "-- select a reason --"  
)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10034525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档