2011-04-07 66 views
1

我正在创建自定义帮助器来呈现标签,相应的文本框,验证助手和周围的li元素。在自定义帮助器中的验证,空引用

时,我想包括验证消息我得到一个异常:

System.NullReferenceException:对象 引用未设置为一个 对象的实例。

并且发现它的代码失败:htmlHelper.ValidationMessageFor(expression).ToString();

我的问题:

  1. 我怎样才能找到具体哪个对象是空?
  2. 有没有更好的方法来做到这一点?
public static string MooseTextBoxLineFor<TModel, 

TProperty>(此的HtmlHelper 的HtmlHelper,表达式>表达式) {

TagBuilder liBuilder = new TagBuilder("li"); 
    liBuilder.AddCssClass("TextBox"); 

    liBuilder.InnerHtml = htmlHelper.LabelFor(expression).ToString() 
          + htmlHelper.EditorFor(expression).ToString() 
          + htmlHelper.ValidationMessageFor(expression).ToString(); 

    return liBuilder.ToString(); 
} 
+0

可以调试代码,把一个断点行,其中你正在做的ToString()...我怀疑其中一个标签/编辑。/ validationmessage为空,你打电话给...上的tostring ... – sajoshi 2011-04-07 08:44:21

回答

3

如果没有确认消息,那么助手将返回null,你在呼唤ToString()在null上,这就是为什么你会得到这个错误。

个人而言,我会做这个使用EditorTemplates系统MVC,但如果你更愿意做这种方式我会做这样的事情:

var Label = htmlHelper.LabelFor(expression); 
var Editor = htmlHelper.EditorFor(expression); 
var Validation = htmlHelper.ValidationMessageFor(expression); 

liBuilder.InnerHtml = (Label == null ? "" : Label.ToString()) 
           + (Editor == null ? "" : Editor.ToString()) 
           + (Validation == null ? "" : Validation.ToString()); 
+0

thnx工程很大 – cpoDesign 2011-04-29 08:23:58

+0

我不完全认为这是必要的,当有没有错误显示在屏幕上。我就像“我有一个为这个字段定义的错误消息”,但这不是问题。谢谢:) – Jen 2014-09-16 23:48:11