使用jQuery脚本在ASP.NET中添加代码(ASP.NET MVC)

时间:2013-06-26 09:52:43

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

我的视图中有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>

}

但是我犯了很多错误 有什么问题以及如何解决这个问题?

3 个答案:

答案 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块)。