asp.net-mvc - ASP.Net MVC 控制器的数据注释是否有顺序
问题描述
我发现了一些奇怪的东西,我需要专业的意见。我有 ASP.NET MVC 应用程序具有排序、搜索和分页的数据视图。我使用了MultipleButton Data Annotation,所以我可以有多个具有相同参数的操作,如下所示:
[SessionAuthorize]
[AuthorizationFilter(Page = PageEnum.EgyptianEmployees, PageAction = PageActionEnum.View)]
public ActionResult Index(string sortOrder, string searchString, string currentFilter,int? searchType , int? filtertype, int? page)
{
//Normal View index with filter, sorting, and pagination
}
[SessionAuthorize]
[AuthorizationFilter(Page = PageEnum.EgyptianEmployees, PageAction = PageActionEnum.View)]
[MultipleButton(Name = "action", Argument = "IndexSearch")]
public ActionResult IndexSearch(string sortOrder, string searchString, string currentFilter, int? searchType, int? filtertype, int? page)
{
return RedirectToAction("Index", new { sortOrder = sortOrder, searchString = searchString, currentFilter = currentFilter, searchType = searchType, filtertype = filtertype, page = page });
}
[SessionAuthorize]
[MultipleButton(Name = "action", Argument = "IndexReport")]
[AuthorizationFilter(Page = PageEnum.EgyptianEmployees, PageAction = PageActionEnum.View)]
public ActionResult IndexReport(string searchString, int? searchType)
{
//Some Reporting Technique
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var isValidName = false;
var keyValue = string.Format("{0}:{1}", Name, Argument);
var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);
if (value != null)
{
controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
isValidName = true;
}
return isValidName;
}
}
我的观点是这样的:
@using (Html.BeginForm("", "EgyptionEmployee", FormMethod.Get))
{
<div class="col-lg-12">
@Html.DropDownList("searchType", (SelectList)ViewBag.SearchList, new { @class = "form-control" })
</div>
<hr />
<div class="col-lg-12">
<div class="input-group" dir="ltr">
<input type="text" id="SearchString" value="@ViewBag.CurrentFilter" name="SearchString" class="form-control" dir="rtl" placeholder="Search ...">
<span class="input-group-btn">
<button class="btn btn-secondary" type="submit" value="Search" name="action:IndexSearch">Search</button>
<button class="btn btn-primary" type="submit" value="Report" name="action:IndexReport">Download Search Report</button>
</span>
</div>
</div>
}
但我得到了以下错误:
当前对控制器类型“ForignEmployeeController”的操作“Index”的请求在以下操作方法之间不明确:System.Web.Mvc.ActionResult IndexSearch(System.String, System.String, System.String, System.Nullable'1[System .Int32], System.Nullable'1[System.Int32], System.Nullable'1[System.Int32]) 在类型 Tourist.Controllers.ForignEmployeeController System.Web.Mvc.ActionResult Index(System.String, System.String, System.String, System.Nullable'1[System.Int32], System.Nullable'1[System.Int32], System.Nullable'1[System.Int32]) 在 Tourism.Controllers.ForignEmployeeController 类型上
经过几个小时的挣扎
我刚刚替换了我在AuthorizationFilter之前放置MultipleButton的数据注释顺序,如下所示:
[MultipleButton(Name = "action", Argument = "IndexSearch")]
[AuthorizationFilter(Page = PageEnum.EgyptianEmployees, PageAction = PageActionEnum.View)]
我的问题是为什么这解决了问题,我将来是否应该遵循任何类型顺序以避免此类错误?
解决方案
推荐阅读
- javascript - 如何拆分遍历一个巨大数组的过程?
- ruby-on-rails - 在 RoR 中的线程中运行刮板
- python - 通过跳过第一个来更改列的数字名称
- r - 为 fileInput 按钮使用 shinyWidgets
- java - 遍历两个列表时如何检查字符串是否相等?
- angular - 尝试打开没有关联输入的 MatDatepicker
- javascript - Razor 页面 Google Chrome 默认 DataPicker
- javascript - 成功登录时 $_SESSION 不起作用
- html - 为什么我的 CSS 网格布局 div 不以大视口为中心?
- android - android在来电时无法获取联系号码