2012-03-18 118 views
1

这是一个后续到这一点: What does MVC3 do with C# Optional Parameters?MVC3可选参数

我有以下签名的动作:

public ViewResult Show(int Id, PublishingErrorSummary pubErrors=null, String title=null) 

在请求服务器/显示/ 1 pubErrors不为空,但标题一片空白。这怎么可能?这些只是两个对象,但字符串以某种方式管理为空。我可以在哪里修复?

编辑:类定义添加

public class PublishingErrorSummary 
{ 
    public List<string> StepOneErrors { get; set; } 
    public List<string> StepTwoErrors { get; set; } 
    public List<string> StepThreeErrors { get; set; } 
    public List<string> StepFourErrors { get; set; } 
} 

回答

3

PublishingErrorSummary是一个复杂的对象。默认的模型联编程序总是初始化复杂的对象。将其默认值设置为null没有意义。同样代表标题参数。字符串是引用类型,如果没有发送请求参数title,它们的默认值将为空。

+0

感谢您的快速响应! “ ”如果默认模型联编程序在请求中遇到与此模型的其中一个属性相对应的键,则它将初始化它“ 它确实有意义,但没有键对应于PublishingErrorSummary的任何属性。我刚刚添加了班级的定义。这是否意味着复杂类型总是通过默认绑定器实例化?我的路线是典型的,只有ID是可选的,其他路线中没有提到。 – 2012-03-18 15:29:36

+0

@ Mariusz.W,你是对的。即使请求中没有与此模型的属性匹配的参数,默认模型联编程序也会始终实例化复杂对象。我已经更新了我的答案。 – 2012-03-18 15:32:03

+0

谢谢!将检查所有列表是否为空:D今天没有心情定制粘合剂! – 2012-03-18 15:36:04