更新的.html与@HTML帮手的DropDownList(update .html with @H

2019-09-26 04:06发布

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之前添加@,“@ HTML.DropDownList ...,没有区别)。

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

谢谢

Answer 1:

有趣的使用HTML辅助注射...的Html.DropDownList产生多条线路虽然,产生一个未终止JavaScript字符串。 你打算如何来解决呢?

为什么不把它注射到一个虚拟的脚本模板格,而不是和你的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的更好的分离。



文章来源: update .html with @HTML helper DropDownList