【问题标题】:Default parameter in all action before action executing in mvc在 mvc 中执行操作之前的所有操作中的默认参数
【发布时间】:2018-06-07 08:01:49
【问题描述】:

有没有办法为 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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你是对的。但我正在发送 ajax 调用。该锚正在发送 ajax 调用而不是页面重新加载调用。
    • 您的问题中没有关于 ajax 调用的任何内容,但如果它是查询字符串值,那应该不会有什么不同。
    • 是的,你说得对。 ajax调用没有任何问题。忘了说:|但我需要这样。我用ajax调用尝试了你的解决方案,但没有得到查询字符串值,因为它不是页面加载调用。我认为这是不可能的
    • 当然可以,但我们不知道您的 ajax 调用是什么。
    • 我正在更新问题
    【解决方案2】:

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

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

    【讨论】:

    • 我要试试这个。会让你知道它是否适合我。
    【解决方案3】:

    试试这个

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
    
        string FormControlID = filterContext.RequestContext.HttpContext.Request["FormControlID"];
    
        base.OnActionExecuted(filterContext);
    }
    

    【讨论】:

    • 你是对的。但我正在发送 ajax 调用。该锚正在发送 ajax 调用而不是页面重新加载调用。
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多