我正在处理一个项目,在我的索引屏幕上,我想按两个字段排序,一个是文本字段,另一个是枚举字段。我能够让文本搜索工作,但不能使用枚举字段。下拉框确实出现,但传回的值始终为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>
答案 0 :(得分:0)
从以下位置更改方法签名:
public ActionResult Index(string enumPriority, string searchString)
为:
public ActionResult Index(string priority, string searchString)
如上所述,正如Juan在评论中指出的那样,模型绑定器可以为您完成工作。它看起来像这样:
public ActionResult Index(MyModel model)
您希望确保它包含您需要的所有属性(priority,searchString)。该模型还需要一个默认构造函数,以允许模型绑定器创建对象。在这个小例子中,看起来额外的工作似乎不值得,但是在未来,更复杂的模型,或者只是具有更多属性的模型,你会很高兴通过这项工作到模型活页夹。