首页 > 解决方案 > 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)]

我的问题是为什么这解决了问题,我将来是否应该遵循任何类型顺序以避免此类错误?

标签: asp.net-mvccontrollerdata-annotationsactionresult

解决方案


推荐阅读