【问题标题】:Spark View Engine Html.TextArea Bug?Spark 视图引擎 Html.TextArea 错误?
【发布时间】:2009-10-05 18:14:44
【问题描述】:

我有一个奇怪的。我正在尝试简单地使用 TextArea 帮助器来呈现标准文本区域:

    <p>
        <label for="Message">Message:</label>
        ${ Html.TextArea("IssueText") }
        ${ Html.ValidationMessage("IssueText", "*") }
    </p>

还有我的控制器

   public ActionResult Contact() {
            return View();
    }
  [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Contact(FormCollection form) {
            Seller user = _session.AuthenticatedSeller;
            ServiceTicket ticket = new ServiceTicket(user, form["IssueText"],
               form["ContactReason"]);
            if (ticket.IsValid) {
                _servicetTicketRepository.Add(ticket);
                _servicetTicketRepository.Commit();
                return RedirectToAction("Index", "MyPlace");
            }

            ModelState.AddModelErrors(ticket.GetRuleViolations());
            return View();
        }

在第一次加载页面时,它工作得很好并呈现了文本区域

Before http://cadred.net/personal/contact-before.png

但是,当我提交表单以测试验证时,它不再呈现文本区域

After http://cadred.net/personal/contact-after.png

【问题讨论】:

  • 我会将这个提交给 spark-dev 邮件列表。

标签: c# html asp.net-mvc spark-view-engine


【解决方案1】:

您获得 spark 代码而不是测试区域的原因是由于尝试执行 html.textarea 相关语句时发生 null ref 异常。

按如下方式重做您的视图,您将能够在调试器中闯入由 spark 生成的视图代码。

<p>
  <label for="Message">Message:</label>
# System.Diagnostics.Debugger.Break();
  ${ Html.TextArea("IssueText") }
  ${ Html.ValidationMessage("IssueText", "*") }
</p>

现在您可以 F5 项目,当您点击视图时,您应该会看到一个对话框,要求启动调试器,第一次忽略它(点击否)并第二次启动调试器(点击提交后)。该列表应包括您从中运行项目的 VS 实例,选择该实例即可。

寻找空值,否则会在呈现文本区域的 try catch 和它的 catch 处理程序中放置断点。希望您能获得足够的信息来确定发生了什么。

【讨论】:

  • 我确实得到了一个空引用异常,但是我找不到什么是空的?什么都没有向我跳出来。这是生成它的代码:Output.Write(Html.TextArea("Message")); “Output”和“Html”都不为空。
  • 据我所知,只有在该字段出现验证错误时才会发生这种情况。如果我关闭该特定字段的验证,它不会中断。
  • 进入 Html.TextArea("Message") 调用,NRE 将在那里生成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多