我的视图中有div
<div class="control-group" id="Phone"></div>
我需要在jQuery脚本中添加代码。
我试过这个
@section Scripts
{
<script type="text/javascript">
$("select#Role").change(function () {
if ($(this).val() == "2") {
$("div#Phone").html('<span class="control-label">* Phone:</span>
<div class="controls">
@Html.TextBoxFor(m => m.PhoneNumber)
@Html.ValidationMessageFor(m => m.PhoneNumber, null, new { @class = "text-error" })
</div>');
} else {
}
});
</script>
}
但是我犯了很多错误 有什么问题以及如何解决这个问题?
答案 0 :(得分:6)
尝试以下代码
@{
var input= Html.TextBoxFor(m => m.PhoneNumber).ToHtmlString();
var message = Html.ValidationMessageFor(m => m.PhoneNumber, null, new { @class = "text-error" }).ToHtmlString();
}
@section Scripts
{
<script type="text/javascript">
$("select#Role").change(function () {
if ($(this).val() == "2") {
$("div#Phone").html('<span class="control-label">* Phone:</span><div class="controls">' + '@input' + '@message' + '</div>');
} else {
}
});
</script>
}
答案 1 :(得分:0)
您正在将razor代码注入HTML。 Razor代码在服务器端执行,当服务器呈现页面并发送到浏览器时它将是HTML。因此剃刀代码无法在客户端运行。它在HTML中不是有效的。您的javascript只能在页面呈现后运行客户端,因为它是客户端脚本。因此,通过javascript注入剃刀代码是没有意义的。你想做什么?
答案 2 :(得分:0)
看起来你正试图在JavaScript中创建一个多行字符串。为此,我相信你需要“逃避”换行符:
'<span class="control-label">* Phone:</span> \
<div class="controls"> \
@Html.TextBoxFor(m => m.PhoneNumber) \
@Html.ValidationMessageFor(m => m.PhoneNumber, null, new { @class = "text-error" }) \
</div>'
您还需要仔细检查此服务器端代码在客户端上实际呈现的方式,以确保它符合您的预期,并且仍然是有效的JavaScript(因为您将其简单地呈现为字符串)一个JavaScript块)。