ASPをNET MVCのすべてのパラメータが自動的にデフォルトに設定されます
4608 ワード
今日CSDNの上で1つの问题を见て少し面白いと感じます:“ASP.NET MVCのすべてのパラメータがすべて自动的にデフォルトに设定することができますか”
ルーティングを構成しない場合は、一部のパラメータに値が割り当てられていないため、localhostに直接アクセスするとエラーが発生します.
このエラーからMVCが対応するActionを見つけたことがわかります.この場合、呼び出し前に処理し、パラメータにデフォルト値を割り当てるだけでいいです.
この場合OnActionExecutingメソッドを使用できますhttp://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.onactionexecuting%28v=vs.118%29.aspx
成功!
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();
}
}
成功!