MVC3对C#可选参数做了什么?
设置以下控制器
public class HomeController : Controller { // GET: /Home/Read public string Read(Sample sample = null) { if (sample != null) Console.WriteLine("Not null"); else Console.WriteLine("null"); return ""; } } public class Sample { }
样本不为空 。 这是一个错误还是一个function?
可选参数通过呼叫站点重写实现 。 由于MVC引擎将使用完整参数列表调用控制器,因此可选参数根本不相关。
例如,给定以下function:
public void Foo(int bar = 1, int baz = 2) { }
这样称呼它:
Foo();
使编译器实际将其解释为:
Foo(1, 2);
没有任何魔法发生,因为调用保持为Foo()
,然后方法本身在运行时在参数中包含。 这些参数在编译时被编入,没有什么需要做的。
更新 :要向MVC指示给定路由参数是可选的,您可以在定义路径时将其设置为UrlParameter.Optional
。 此时,操作方法的默认参数值应该启动。
它的function不是bug。 绑定器看到方法签名是唯一有意义的方法(如果你定义一个没有参数我想象会被调用,或者你会得到’模糊调用’错误)并创建一个空实例,因为没有查询字符串参数可用。 由于它的模型绑定器在创建实例而不是编译器,所以它是MVC所做的。
- 在MVC(httpmodule)中将英文数字更改为波斯语,反之亦然?
- DefaultModelBinder无法反序列化作为JSON对象传递给操作的.NET Dictionary对象?
- 无法在global.asax / Application_Start中断
- 使用ModelBinder属性与ModelBinders.Add()
- AllowHtml属性不起作用
- 如何在AutoMapper中处理自定义属性
- 确定ASP.NET MVC 3中的请求是否为PartialView或AJAX请求
- MusicStore’System.Data.Objects.ObjectSet ‘不包含’Add’的定义,也没有扩展方法’Add’接受第一个参数
- 使用和枚举。 MVC3 ASP.Net中的自定义HtmlHelper