【问题标题】:Dynamically generated <tr>s causing ASP.NET to crash动态生成的 <tr> 导致 ASP.NET 崩溃
【发布时间】:2014-03-25 16:04:29
【问题描述】:

在 ASP.NET MVC4 中,我在表中动态生成 &lt;tr&gt;s。我这样做是为了根据模型中的变量应用不同的onclick 值。

当我这样做时:

if(publication.ActionType == ActionType.NoticeOnly){
   <tr onclick='$launchMyEman(this, 'NoticeOnly')'>
} // Visual Studio treats this line as text, note code

所以我使用Html.Encode() 作为解决方法。这是我当前的代码:

if(publication.ActionType == ActionType.NoticeOnly){
   @Html.Raw("<tr onclick='$launch(this, 'NoticeOnly')'>")
} else if (publication.ActionType == ActionType.ReadAndSign) {
   @Html.Raw("<tr onclick='$launch(this, 'ReadAndSign')'>")
} else {
   @Html.Raw("<tr onclick='$launch(this, 'ReadAndSignNotice')'>")
}

当这个View被加载时,会导致如下错误:

遇到没有匹配开始标记的结束标记“tr”。是你的 开始/结束标签是否正确平衡?

&lt;/tr&gt; 标签出现在很多 &lt;td&gt;s 之后。如果我删除上面的代码并放置一个简单的&lt;tr&gt; 它可以工作,所以错误肯定是上面的代码。当我在视图上放置断点时,它永远不会到达。它在运行时。

【问题讨论】:

  • 查看呈现的 html 的视图源并确保遵循标准 HTML
  • 我看不到渲染的 HTML,我得到的只是一个解析器错误页面。
  • 当您确实希望在网页上显示 字符时,应该进行编码。你试图放下 HTML,所以你特别不想想要编码。
  • 是的,我的错。我尝试过使用 Html.Raw() 并出现同样的错误。

标签: jquery html asp.net asp.net-mvc-4


【解决方案1】:

我会将您的代码更改为以下内容:

@{
  string launchAction = string.Empty;
  switch (publication.ActionType)
  {
    case ActionType.NoticeOnly:
       launchAction = "NoticeOnly";
       break;
    case ActionType.ReadAndSign:
       launchAction = "ReadAndSign";
       break;
    default:
       launchAction = "ReadAndSignNotice";
       break;
  }
}

那么你可以使用下面的html

<tr onclick="$launch(this, '@launchAction')">

【讨论】:

  • 自己想到了一个类似的解决方案。谢谢。
  • 如果你的枚举有“ReadAndSignNotice”,你可能会错过这个开关,只需要使用@publication.ActionType.ToString()
【解决方案2】:

您正在显式编码您的字符串。做什么的?它们将呈现为&amp;lt;tr - 绝对不是你想要的。

您可以在此处使用Html.Raw 按原样呈现标记:

@Html.Raw("<tr onclick='$launch(this, 'NoticeOnly')'>")

【讨论】:

  • @JohnSmith,引号也可能有问题 - 请注意字符串中的单引号太多
【解决方案3】:

在你看来尝试:

@if(publication.ActionType == ActionType.NoticeOnly){
   <tr onclick="$launch(this, 'NoticeOnly')">
} else if (publication.ActionType == ActionType.ReadAndSign) {
  <tr onclick="$launch(this, 'ReadAndSign')">
} else {
   <tr onclick="$launch(this, 'ReadAndSignNotice')">
}

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 2013-08-24
    • 2012-08-19
    • 2021-10-18
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2011-06-04
    相关资源
    最近更新 更多