在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上放置断点时,它永远不会到达。它在运行时。
答案 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)
您正在明确编码字符串。做什么的?它们将呈现为<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')">
}