Параметры действия Добавить значение по умолчанию, когда нет ключа - PullRequest
0 голосов
/ 15 февраля 2010

Как мне установить значение по умолчанию в моём фильтре действий, когда параметр ActionParameter пуст?

Когда я использую действия О и Area_1419 на моем контроллере, фильтр работает нормально, так как он принимает переданный параметр SectionID . Когда я использую действие index, я получаю сообщение об ошибке ниже ...

Указанный ключ отсутствует в словаре. На этой линии ...

var GetSectionID = filterContext.ActionParameters["SectionID"];

Я не буду добавлять параметр SectionID к каждому действию контроллера, поскольку он применяется только к определенным разделам, и я не хочу добавлять фильтр к каждому действию, поскольку фильтр также влияет на эти страницы.

Можно ли установить значение по умолчанию для SectionID в фильтре, если для SectionID нет значений?

CategoriesAttribute

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();
        }
    }
}

1 Ответ

3 голосов
/ 15 февраля 2010

ActionParameters - это словарь; сначала проверьте ключ через ActionParameters.ContainsKey ("SectionID"). В словаре проверка ключа никогда не возвращает ноль, но выдает это исключение, потому что он всегда ожидает ключ.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...