如何將ASP.NET MVC所有參數均自動設置為默認


今天看到CSDN上有個問題覺得有點意思:"可不可以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>參數名: parameters</i> </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();
        }
    }

 

成功!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM