每页加载mvc 5运行函数

时间:2016-06-02 18:58:57

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我在堆栈上搜索的许多答案都与旧版本的asp.net mvc有关,所以我想发布一个新问题,因为它与在每个页面上运行一个函数相关特定于mvc5 即可。我基本上希望每次加载页面时都运行一个查询。

read以下与mvc 3有关,但它有点令人困惑,并没有真正提供任何帮助。我想将以下代码移到“全局”函数中:

namespace MVC5.Controllers
{
  public class LoginController : Controller
  {
    private LoginDataContext context;        

    public LoginController()
    {
        context = new LoginDataContext();
    }   

    public ActionResult Index()
    {
        int item=1;
        List<int> foo = context.ExecuteQuery<int>("SELECT foo from bar where id={0}", item).ToList();            
        foreach (var item in isUpdating)
        {      
          //if logic .....
          return PartialView("DbUpdate");
        }
        return RedirectToAction("Index", "Home");
    }
  }
}

更新

我能够在this articlethis article的帮助下使用此功能。我不想将此标记为重复但尚未b / c我真的不知道在哪里创建这些文件(例如模型文件夹,控制器文件夹等)。我仍然是MVC的新手,所以如果有人不同意,我很高兴将此标记为傻瓜。以下是我用来解决问题的步骤。

在模型文件夹“MyActionFilter.cs”中创建:

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

namespace MVC5.Models
{
    public class MyActionFilter : ActionFilterAttribute
    {       
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {  
            var dbUpdate = new DbUpdateController();
            int nomz=1;
            if (nomz==1)
            {
               filterContext.Result = dbUpdate.Index();
            }
        }
    }
}

然后我将此添加到我的FilterConfig.cs文件中,就像现在一样:

using System.Web;
using System.Web.Mvc;
using MVC5.Models;

namespace MVC5
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new MyActionFilter());  
        }        
    }
}

控制器看起来像这样

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

namespace MVC5.Controllers
{
    public class DbUpdateController : Controller
    {
        // GET: DbUpdate
        public ActionResult Index()
        {
            return View("DbUpdate");
        }       

    }
}

1 个答案:

答案 0 :(得分:2)

对于类似这样的东西,我喜欢创建自定义属性,然后你可以在控制器和/或动作级别上定义它,这样你就可以灵活地在某些地方使用它。

如果那对你很有意思

https://msdn.microsoft.com/en-us/library/system.web.mvc.actionfilterattribute(v=vs.118).aspx

我也忘记了全局动作过滤器 http://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-global-action-filters

及其在mvc5中的覆盖

http://davidhayden.me/blog/filter-overrides-in-asp-net-mvc-5

他们很简单。正常定义动作过滤器并在Application_Start()添加

中定义
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

并在App_Start \ FilterConfig.cs文件中

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new YOURCUSTOMFILTER );
     }