C# 根据ASP.NET MVC中的条件选择要枚举DropDownlistFor的特定枚举
我有问题,仍然不理解EnumDropDownListFor中的Enum的概念,无法绑定特定的现有Enum值C# 根据ASP.NET MVC中的条件选择要枚举DropDownlistFor的特定枚举,c#,asp.net-mvc,enums,enumdropdownlistfor,C#,Asp.net Mvc,Enums,Enumdropdownlistfor,我有问题,仍然不理解EnumDropDownListFor中的Enum的概念,无法绑定特定的现有Enum值 public class LeaveRequestModel { public int LeaveId { get; set; } public string LeaveCode { get; set; } public string Reason { get; set; } public LeaveStatus Status { get; set; }
public class LeaveRequestModel
{
public int LeaveId { get; set; }
public string LeaveCode { get; set; }
public string Reason { get; set; }
public LeaveStatus Status { get; set; }
}
public enum LeaveStatus
{
[Display(Name = "New Request")]
NewRequest = 1,
[Display(Name = "Approved by SPV")]
ApprovedBySpv = 2,
[Display(Name = "Approved by HR")]
ApprovedByHr = 3,
[Display(Name = "Rejected By SPV")]
RejectedBySpv = 4
}
我使用EnumDropDownListFor在视图中显示Enum
@Html.EnumDropDownListFor(m => m.Status, "-Please select-", new { @class = "col-sm-10", @required = "required" })
@Html.EnumDropDownListFor(m => m.LeaveStatus, Model.GetAvailableStatuses().Select(s => new SelectListItem {
Text = s.ToString(),
Value = ((int)s).ToString()
}).ToList(), "-Please select-", new { @class = "col-sm-10", @required = "required" })
结果是这样的:
我的问题是如何在EnumDropDownList for中仅显示特定条件下的特定Enum值ApprovedByPV
和ApprovedByHr
?如果可能的话,我怎么做 模型:
public class LeaveRequestModel
{
...
public LeaveStatus Status { get; set; }
public SelectList FilteredLeaveStatus {get;set;}
}
控制器:
public ActionResult LeaveRequest()
{
var model = new LeaveRequestModel();
if(condition)
{
var filtered = new[]
{
new SelectListItem{Value = LeaveStatus.ApprovedBySpv, Text = "Rejected By SPV"},
new SelectListItem{Value = LeaveStatus.ApprovedByHr, Text = "Approved by HR"}
};
model.FilteredLeaveStatus = new SelectList(filtered);
}
...
return View(model);
}
视图:
型号:
控制器:
public ActionResult LeaveRequest()
{
var model = new LeaveRequestModel();
if(condition)
{
var filtered = new[]
{
new SelectListItem{Value = LeaveStatus.ApprovedBySpv, Text = "Rejected By SPV"},
new SelectListItem{Value = LeaveStatus.ApprovedByHr, Text = "Approved by HR"}
};
model.FilteredLeaveStatus = new SelectList(filtered);
}
...
return View(model);
}
视图:
您可以向类中添加一个方法,该方法将接受确定条件的值,并且只返回相关的枚举。 例如,假设一个人只能将状态提升到较高的状态,但不能将其移回较低的状态。您可以添加一个方法,该方法将采用当前状态,并且只返回具有更高值的状态 方法(添加到
LeaveRequestModel
class)
注意,我猜测了您的情况,但是您可以在
GetAvailableStatuses
方法中更新它 您可以向类添加一个方法,该方法将接受确定条件的值,并且只返回相关的枚举。
例如,假设一个人只能将状态提升到较高的状态,但不能将其移回较低的状态。您可以添加一个方法,该方法将采用当前状态,并且只返回具有更高值的状态
方法(添加到LeaveRequestModel
class)
注意,我猜测了您的情况,但是您可以在
GetAvailableStatuses
方法中更新它 这可以工作,但不使用枚举的显示名称属性。使用一种方法更新,您可以设置文本
值,也可以使用类型反射动态提取属性值。这可以工作,但不使用枚举的显示名称属性。使用一种方法更新,您可以设置文本
值,或者可以使用类型反射动态提取属性的值。是否检查了这些答案?在浏览器上隐藏它们是有效的替代方案吗?也许这是一个更简单的方法。你检查过这些答案吗?在浏览器上隐藏它们是有效的替代方案吗?也许这是一种更简单的方法。Noenumdopdownlistfor
重载需要SelectList
。Noenumdopdownlistfor
重载需要SelectList
。
@Html.EnumDropDownListFor(m => m.LeaveStatus, Model.GetAvailableStatuses().Select(s => new SelectListItem {
Text = s.ToString(),
Value = ((int)s).ToString()
}).ToList(), "-Please select-", new { @class = "col-sm-10", @required = "required" })