我在堆栈上搜索的许多答案都与旧版本的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 article和this 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");
}
}
}
答案 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 );
}