首页 > Web开发 > 详细

如何将ASP.NET MVC所有参数均自动设置为默认

时间:2014-03-08 07:36:08      阅读:587      评论:0      收藏:0      [点我收藏+]

今天看到CSDN上有个问题觉得有点意思:"可不可以ASP.NET MVC所有参数均自动设置为默认"

bubuko.com,布布扣
public class HomeController : Controller
{
    public ActionResult Index(int para1,string para2,int para3,bool para4)
    {
        return View();
    }
}
bubuko.com,布布扣

如果不配置路由,直接访问localhost会报错,因为其中一些参数没有赋值

bubuko.com,布布扣
<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>
bubuko.com,布布扣

 

从这个错误其实可以看出MVC已经找到了对应的Action,这时我们只需要在调用前做些处理,为参数赋默认值就行了。

这时就可以用到OnActionExecuting 方法 http://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.onactionexecuting%28v=vs.118%29.aspx

bubuko.com,布布扣
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();
        }
    }
bubuko.com,布布扣

 

成功!

如何将ASP.NET MVC所有参数均自动设置为默认,布布扣,bubuko.com

如何将ASP.NET MVC所有参数均自动设置为默认

原文:http://www.cnblogs.com/feiyun0112/p/3586385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!