在mvc中执行操作之前的所有操作中的默认参数

时间:2018-06-07 08:01:50

标签: asp.net asp.net-mvc action-filter onactionexecuting

有没有办法为MVC应用程序中的每个操作添加一些默认参数。所以如果从锚点href发送,我可以得到参数的值。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
      int currentformcontrolid = 0;
       foreach (var parameter in filterContext.ActionParameters)
       {
           if (parameter.Key == "FormControlID")
           {
               currentformcontrolid = Int32.Parse(parameter.Value.ToString());
           }
       }
}

和我这样的href(这是一个AJAX锚点调用):

<a 
  data-ajax="true" 
  data-ajax-method="GET" 
  data-ajax-mode="replace" 
  data-ajax-update="#soapfunction-screens" 
  href="/Patient/Intake?FormContorlID=100003"
  data-islandingpage="False"
  id="InkAlcoholDrug" >
    Alcohol Drug Use 
</a>

和我的操作一样(可以是应用程序中的任何操作,每个操作都应该有该参数FormControlID

public ActionResult WhatEverAction(int TestID=0)
{

}

OnActionExecuting我只能访问TestID,但不能访问href的参数FormControlID

3 个答案:

答案 0 :(得分:3)

您可以从Request属性的HttpContext属性访问查询字符串值

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    int currentformcontrolid = Convert.ToInt32(filterContext.HttpContext
       .Request.QueryString["FormControlID"].ToString());
}

答案 1 :(得分:1)

您可以尝试在路线中指定该参数:​​

routes.MapRoute(
    name: “Default”,
    url: “{controller}/{action}/{FormControlID}”,
    defaults: new { controller = “Home”, action = “Index”, FormControlID = UrlParameter.Optional }
);

答案 2 :(得分:1)

试试这个

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{

    string FormControlID = filterContext.RequestContext.HttpContext.Request["FormControlID"];

    base.OnActionExecuted(filterContext);
}

enter image description here