1

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>

当我尝试使用带有 jQ​​uery .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()?

谢谢

4

1 回答 1

8

Html helper injection 的有趣使用... 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 与代码分离。

于 2013-07-29T16:22:10.430 回答