ASP.NET Передача MVC возражает от Фильтра Пользовательского действия до Действия

Дополнительный Человек Метода к спасению!

    /// <summary>
    /// Adds all given items to the collection
    /// </summary>
    /// <param name="collection">The collection.</param>
    /// <param name="toAdd">Objects to add.</param>
    public static void AddAll<T>(this IList<T> collection, params T[] toAdd)
    {
        foreach (var o in toAdd)
            collection.Add(o);
    }
65
задан reach4thelasers 27 November 2009 в 14:18
поделиться

3 ответа

Я бы порекомендовал поместить его в данные маршрута.

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RouteData.Values.Add("test", "TESTING");
        base.OnActionExecuting(filterContext);
    }

    public ActionResult Index()
    {
        ViewData["Message"] = RouteData.Values["test"];

        return View();
    }
53
ответ дан 24 November 2019 в 15:18
поделиться

Вы можете использовать HttpContext :

filterContext.HttpContext.Items["criteria"] = criteria;

И вы можете прочитать его в действии:

[YourActionFilter]
public ActionResult SomeAction() 
{
    var criteria = HttpContext.Items["criteria"] as DetachedCriteria;
}
39
ответ дан 24 November 2019 в 15:18
поделиться

Установите элемент в ViewData или в модели просмотра, если вы передаете его как параметр в свое действие. Здесь я устанавливаю свойство ViewModel

public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
     ViewModelBase viewModel = null;
     foreach (object parameter in filterContext.ActionParameters.Values)
     {
         if (parameter is ViewModelBase)
         {
             viewModel = (ViewModelBase)parameter;
             break;
         }
     }
     if(viewModel !=null)
     {
         viewModel.SomeProperty = "SomeValue";
     }
 }


    public ActionResult About(ViewModelBase model)
    {
      string someProperty= model.SomeProperty;
}

Вот нетипизированная версия, которую, я думаю, вы предпочитаете:

   public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewData.Add("TestValue", "test");

    }

       [FilterWhichSetsValue]
        public ActionResult About()
        {
            string test = (string)ViewData["TestValue"];
            return View();
        }
3
ответ дан 24 November 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: