ASPをNET MVCのすべてのパラメータが自動的にデフォルトに設定されます

4608 ワード

今日CSDNの上で1つの问题を见て少し面白いと感じます:“ASP.NET MVCのすべてのパラメータがすべて自动的にデフォルトに设定することができますか”
public class HomeController : Controller
{
    public ActionResult Index(int para1,string para2,int para3,bool para4)
    {
        return View();
    }
}

ルーティングを構成しない場合は、一部のパラメータに値が割り当てられていないため、localhostに直接アクセスするとエラーが発生します.
<span><h1>“/”           。<hr color="silver" size="1" width="100%">h1>
<h2> <i>  “MvcApplication1.Controllers.HomeController”   “System.Web.Mvc.ActionResult Index(Int32, System.String, Int32, Boolean)”      null    “System.Int32”   “para1”,         null  。           、    null            。<br>   : parametersi> h2>span>

 
このエラーからMVCが対応するActionを見つけたことがわかります.この場合、呼び出し前に処理し、パラメータにデフォルト値を割り当てるだけでいいです.
この場合OnActionExecutingメソッドを使用できますhttp://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.onactionexecuting%28v=vs.118%29.aspx
public class HomeController : Controller
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var methodInfo = ((ReflectedActionDescriptor) filterContext.ActionDescriptor).MethodInfo;
            foreach (var p in methodInfo.GetParameters())
            {
                if (p.ParameterType.IsValueType)
                {
                    filterContext.ActionParameters[p.Name] = Activator.CreateInstance(p.ParameterType);
                }
            }
        }

        public ActionResult Index(int para1, string para2, int para3, bool para4)
        {
            Debug.Print("para1:{0} para2:{1} para3:{2} para4 :{3}",para1, para2,  para3, para4);
            return View();
        }
    }

 
成功!