使用@HTML helper DropDownList更新.html

时间:2013-07-28 02:30:32

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

MVC4,C#,jQuery,Razor视图(.cshtml)

我尝试用@ HTML.DropDownList更新节点的.html():

<script type="text/javascript">
$('#CmpMASttF').html('@Html.DropDownList("CmpAdrsSt.State", (IEnumerable<SelectListItem>)ViewBag._State) @Html.ValidationMessageFor(m => m.CmpAdrsSt.State) '); 
</script>

这适用于@ HTML.EditorFor:

$('#CmpMASttF').html('@Html.EditorFor(m => m.CmpAdrsSt.State) @Html.ValidationMessageFor(m => m.CmpAdrsSt.State) ');

这是正在更新的节点:

        <tr class="CmpMA"><td tate: </td>
        <td  colspan="4" ><span id="CmpMASttF" class="editor-field"></span> </td></tr>

@ HTML.DropDownList代码本身可以正常工作,因此不是问题的根源:

        <tr><td>State: </td>
        <td  colspan="4"><span class="editor-field">
              @Html.DropDownList("CmpAdrsSt.State", (IEnumerable<SelectListItem>)ViewBag._State)
              @Html.ValidationMessageFor(m => m.CmpAdrsSt.State)</span> </td></tr>

当我尝试使用带有jQuery .html()的@HTML.DropDownList更新节点时,javascript块中的所有代码都被禁用。

我尝试编码字符串:

var test = '@Ajax.JavaScriptStringEncode("Html.DropDownList(\"CmpAdrsSt.State\",(IEnumerable<SelectListItem>)ViewBag._State)")'

但是当注入.html()时,它呈现为字符串而不是HTML DropDownList助手(在HTML之前添加@,&#34; @ HTML.DropDownList ......,没有区别)。

如何使用@ HTML.DropDownList更新节点的.html()?

谢谢

1 个答案:

答案 0 :(得分:8)

有趣地使用Html帮助器注入... Html.DropDownList生成多行,生成未终止的javascript字符串。你打算如何解决这个问题?

为什么不将它注入虚拟脚本模板div而让你的JQuery简单地复制它?

<script id="template" type="text/template">
    @Html.DropDownList("CmpAdrsSt.State", (IEnumerable<SelectListItem>)ViewBag._State) @Html.ValidationMessageFor(m => m.CmpAdrsSt.State) 
</script>

然后使用:

复制
$('#CmpMASttF').html($('#template').html());

我更喜欢尝试将HTML注入Javascript字符串文字中,因为这样可以更好地将UI与代码分开。