asp.net C# mvc2中controller的无法获取参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net C# mvc2中controller的无法获取参数相关的知识,希望对你有一定的参考价值。
建立了一个FristController
public void Index()
Response.Write("<h1>欢迎<h1/>");
//public void SetNum(int i)
//
// Response.Write("<h1>欢迎,你是第" + i.ToString() + "位来宾<h1/>");
//
public void SetNum(string i)
Response.Write("<h1>欢迎,你是第" + i + "位来宾<h1/>");
运行后Index正常,运行后成功。
但是运行Frist/SetNum/12
1。参数为string类型时,万全获取不到参数。
2.参数为注释的int时,运行后直接显示以下错误:
对于“MvcApplication2.Controllers.FristController”中方法“Void Dear(Int32)”的不可以为 null 的类型“System.Int32”的参数“i”,参数字典包含一个 null 项。可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。
参数名: parameters
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentException: 对于“MvcApplication2.Controllers.FristController”中方法“Void Dear(Int32)”的不可以为 null 的类型“System.Int32”的参数“i”,参数字典包含一个 null 项。可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。
参数名: parameters
求大神解释!!!
1、用string[]
arr=request.form.allkeys,这个是个string数组,通过arr[0],arr[1]..........获取所有post传过来的参数名字,
2、然后再循环arr这个数组,通过循环数组arr获取参数值,如
request.form[arr[0]]..................其他同理。 参考技术B 参数传递的应和路由里的参数一致,为id 的吧本回答被提问者采纳
C#获取类以及类下的方法(用于Asp.Net MVC)
在开发MVC项目中遇到的问题,做权限控制时,通过MVC的过滤器来实现,所以在分配权限时希望获取到所有的控制器和Action方法,通过查找资料,参考了《Asp.Net MVC框架揭秘》,最终实现。
在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection。
public ActionResult GetControllerAndAction() List<Type> controllerTypes = new List<Type>(); //创建控制器类型列表 var assembly = Assembly.Load("MySoft.UI"); //加载程序集 controllerTypes.AddRange(assembly.GetTypes().Where(type => typeof(IController).IsAssignableFrom(type) && type.Name!="ErrorController")); //获取程序集下所有的类,通过Linq筛选继承IController类的所有类型 StringBuilder jsonBuilder = new StringBuilder(); //创建动态字符串,拼接json数据 注:现在json类型传递数据比较流行,比xml简洁 jsonBuilder.Append("["); foreach (var controller in controllerTypes)//遍历控制器类 { jsonBuilder.Append("{\"controllerName\":\""); jsonBuilder.Append(controller.Name); jsonBuilder.Append("\",\"controllerDesc\":\""); jsonBuilder.Append((controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)==null?"" : (controller.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description); //获取对控制器的描述Description jsonBuilder.Append("\",\"action\":["); var actions = controller.GetMethods().Where(method => method.ReturnType.Name == "ActionResult"); //获取控制器下所有返回类型为ActionResult的方法,对MVC的权限控制只要限制所以的前后台交互请求就行,统一为ActionResult foreach (var action in actions) { jsonBuilder.Append("{\"actionName\":\""); jsonBuilder.Append(action.Name); jsonBuilder.Append("\",\"actionDesc\":\""); jsonBuilder.Append((action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute) == null ? "" : (action.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute).Description); //获取对Action的描述 jsonBuilder.Append("\"},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]"); return Content(jsonBuilder.ToString(),"json/text");t");
以上是关于asp.net C# mvc2中controller的无法获取参数的主要内容,如果未能解决你的问题,请参考以下文章
加入后将不同类型返回到视图(ASP.NET MVC2 C#)
在 ASP.NET MVC2 项目中使用 LINQ to SQL
在 Visual Studio 2010 中使用 ASP.NET MVC2 Web 应用程序以 .NET3.5 为目标?