Asp.net mvc 操作参数在没有键时添加默认值

Asp.net mvc 操作参数在没有键时添加默认值,asp.net-mvc,Asp.net Mvc,当ActionParameter为空时,如何在操作筛选器中设置默认值 当我在控制器上使用About和Area_1419 Actions时,过滤器工作正常,因为它拾取通过的SectionID参数。当我使用索引操作时,我得到下面的错误 字典中不存在给定的键。 在这条线上 var GetSectionID = filterContext.ActionParameters["SectionID"]; 我不想在每个控制器操作中添加SectionID参数,因为它只适用于某些部分,我不想在每个操作中添加过滤

当ActionParameter为空时,如何在操作筛选器中设置默认值

当我在控制器上使用AboutArea_1419 Actions时,过滤器工作正常,因为它拾取通过的SectionID参数。当我使用索引操作时,我得到下面的错误

字典中不存在给定的键。 在这条线上

var GetSectionID = filterContext.ActionParameters["SectionID"];
我不想在每个控制器操作中添加SectionID参数,因为它只适用于某些部分,我不想在每个操作中添加过滤器,因为过滤器也会影响这些页面

如果SectionID没有值,是否可以在筛选器中为SectionID设置默认值

分类属性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Website.ActionFilters
{
    public class CategoriesAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var GetSectionID = filterContext.ActionParameters["SectionID"];
            var NoSectionID = 1;

            if (GetSectionID == null)
            {
                filterContext.Controller.ViewData["SectionID"] = NoSectionID;
            }
            else
            {
                filterContext.Controller.ViewData["SectionID"] = GetSectionID;
            }              
        }
    }
}
家庭控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Website.Models;
using Website.ActionFilters;

namespace Website.Controllers
{
    [HandleError,Categories]
    public class HomeController : Controller
   {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About(int SectionID)
        {
            return View();
        }

        public ActionResult Area_1419(int SectionID)
        {
            return View();
        }
    }
}

ActionParameters是一本字典;首先通过ActionParameters.ContainsKey(“SectionID”)检查密钥。对于字典,检查键永远不会返回null,而是抛出该异常,因为它总是需要该键

if (filterContext.ActionParameters.ContainsKey("SectionID"))
{
   //Code to process as section ID
   filterContext.Controller.ViewData["SectionID"] = filterContext.ActionParameters["SectionID"]; 
}
else
{
   //Code to process as if no section ID
   filterContext.Controller.ViewData["SectionID"] = 1;
}

ActionParameters是一本字典;首先通过ActionParameters.ContainsKey(“SectionID”)检查密钥。对于字典,检查键永远不会返回null,而是抛出该异常,因为它总是需要该键

if (filterContext.ActionParameters.ContainsKey("SectionID"))
{
   //Code to process as section ID
   filterContext.Controller.ViewData["SectionID"] = filterContext.ActionParameters["SectionID"]; 
}
else
{
   //Code to process as if no section ID
   filterContext.Controller.ViewData["SectionID"] = 1;
}

谢谢,我没怎么用动作过滤器。如何使用将ActionParameters.ContainsKey(“SectionID”)检查付诸实践?如果要为action param设置默认值,并且要在AuthorizationFilter上使用该值,则不能使用ActionFilterAttribute。在这种情况下,在AuthorizationFilter上,您应该使用RoutedData而不是ActionParameters,因为后者不可用。谢谢,我很少使用ActionFilter。如何使用将ActionParameters.ContainsKey(“SectionID”)检查付诸实践?如果要为action param设置默认值,并且要在AuthorizationFilter上使用该值,则不能使用ActionFilterAttribute。在这种情况下,您应该在AuthorizationFilter上使用RoutedData而不是ActionParameters,因为后者不可用。