0

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>

}

但我有很多错误。
出了什么问题以及如何解决?

4

3 回答 3

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>
}
于 2013-06-26T10:03:33.797 回答
0

您正在将剃刀代码注入 HTML。Razor 代码在服务器端执行,当服务器渲染页面并发送到浏览器时,它将是 HTML。所以剃须刀代码不能在客户端运行。它在 HTML 中无效。您的 javascript 只能在页面渲染后运行客户端,因为它是客户端脚本。所以通过javascript注入razor代码没有意义。你想干什么?

于 2013-06-26T09:56:37.350 回答
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 块中的简单字符串)。

于 2013-06-26T09:57:49.670 回答