动态生成的s导致ASP.NET崩溃

时间:2014-03-25 16:04:29

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

在ASP.NET MVC4中,我在表中动态生成<tr>。我这样做是因为我可以根据模型中的变量应用不同的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')'>")
}

加载此视图时,会导致以下错误:

  

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

</tr>标记出现在很多<td>之后。如果我删除上面的代码并放置一个简单的<tr>它可以工作,所以错误肯定与上面的代码。当我在View上放置断点时,它永远不会到达。它在运行时。

3 个答案:

答案 0 :(得分:2)

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

@{
  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')">

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:-1)

在您看来尝试:

@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')">
}