【问题标题】:Validation in custom helper, null reference自定义助手中的验证,空引用
【发布时间】:2011-04-07 08:38:47
【问题描述】:

我正在创建自定义助手来呈现标签、相应的文本框、验证助手和周围的 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();
}

【问题讨论】:

  • 你能调试代码并在你正在执行 ToString() 的地方放置一个断点...我怀疑其中一个标签/编辑器./validationmessage 为空,而你正在调用 tostring ...

标签: c# asp.net-mvc-2 html-helper


【解决方案1】:

如果没有验证消息,则帮助程序将返回 null,您在 null 上调用 ToString(),这就是您收到此错误的原因。

我个人会使用 MVC 中的 EditorTemplates 系统来执行此操作,但如果您更愿意这样做,我会执行以下操作:

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());

【讨论】:

  • 当屏幕上没有显示错误时,我不太明白这是必要的。我就像“我为此字段定义了一条错误消息”,但这不是问题。帮助我谢谢:)
猜你喜欢
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多