枚举值参数在控制器

时间:2017-09-27 21:10:31

标签: c# asp.net-mvc

我正在处理一个项目,在我的索引屏幕上,我想按两个字段排序,一个是文本字段,另一个是枚举字段。我能够让文本搜索工作,但不能使用枚举字段。下拉框确实出现,但传回的值始终为null。

枚举

public enum Priority 
{
    Low = 0,
    Medium = 1,
    High = 2,
    Urgent = 3,
    Compliance = 4
}

模型

[Required]
[DisplayName("Priority")]
public Priority Priority { get; set; }

[Required]
[StringLength(30, MinimumLength = 1)]
[DisplayName("Requested By")]
public string RequestedBy { get; set; }

控制器:

public ActionResult Index(string enumPriority, string searchString)
{
    var PriorityLst = new List<string>();
    var PriorityQry = from d in db.Reports
                      orderby d.Priority.ToString()
                      select d.Priority.ToString();

    PriorityLst.AddRange(PriorityQry.Distinct());
    ViewBag.Priority = new SelectList(PriorityLst);

    var reports = from m in db.Reports
                  select m;

    if (!String.IsNullOrEmpty(searchString))
    {
        reports =             reports.Where(s=>s.RequestedBy.Contains(searchString));
    }
    if (!String.IsNullOrEmpty(enumPriority))
    {
        reports = reports.Where(x => x.Priority.ToString() ==             enumPriority.ToString());
    }

查看(索引):

<p>

@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm("Index", "Reports", FormMethod.Get)) 
{
<p> Priority: @Html.DropDownList("Priority", "Select")
    Requested By: @Html.TextBox("SearchString") 

    <input type="submit" value="Filter" />
</p>

1 个答案:

答案 0 :(得分:0)

从以下位置更改方法签名:

public ActionResult Index(string enumPriority, string searchString)

为:

public ActionResult Index(string priority, string searchString)

如上所述,正如Juan在评论中指出的那样,模型绑定器可以为您完成工作。它看起来像这样:

public ActionResult Index(MyModel model)

您希望确保它包含您需要的所有属性(priority,searchString)。该模型还需要一个默认构造函数,以允许模型绑定器创建对象。在这个小例子中,看起来额外的工作似乎不值得,但是在未来,更复杂的模型,或者只是具有更多属性的模型,你会很高兴通过这项工作到模型活页夹。