【问题标题】:ASP.Net MVC 5: Html.RenderAction("...") at runtimeASP.Net MVC 5:运行时的 Html.RenderAction("...")
【发布时间】:2016-06-30 12:01:35
【问题描述】:

我想通过按一个按钮多次添加 PartialView。

<div id="FilterRows">
     @{Html.RenderAction("_FilterRow");}
</div>

<button id="newRow" type="button"
     class="btn btn-sm btn-default" 
     style="width: 50px">+</button>

这段代码可以正常工作。但是现在我想在单击按钮时将 div FilterRows 与另一个 PartialView 的 _FilterRow 相附加。

这就是今天的样子:

类似:

$(document).ready(function() {
    $("#newRow").click(function() {
       $("#Exec").append("<br>", @{Html.RenderAction("_FilterRow");} {
       });  
    });
});

不幸的是没有工作。有什么想法吗?

【问题讨论】:

标签: c# jquery asp.net-mvc


【解决方案1】:

如果您添加一个操作,该操作返回作为部分呈现的部分(即return PartialView("myView", model);,那么您可以使用 jQuery 加载:

# Create a new element to contain...
var el  = $('<div></div>');
$('#parent').append(el);
# ...the new content
el.load('@Url.Action("action", "controller"');

(这意味着在 razor 视图中运行 JS 以获得正确的 URL 生成。如果大部分 JS 都在其自己的文件中,则将 URL 从 Razor 文件中的一个小 JS 传递给诸如 URL 之类的东西。)

【讨论】:

    【解决方案2】:

    只要您的脚本在页面中(而不是在外部 .js 文件中),您就可以在 js 中使用 Razor(尽管直接来自 MicroSoft 的反馈表明这是“意外的”,但它可以正常工作)。

    查看呈现的 html 以了解问题所在。

    在这种情况下,您需要在渲染操作周围加上引号 ("):

    $("#FilterRows").append("@{Html.RenderAction("_FilterRow");}");
    

    这假设了一些潜在的问题:

    • “RenderAction”的输出中不能有任何换行符
    • “RenderAction”在输出中不能有任何引号(在追加时使用 ',在渲染中使用 " 或其他方式)
    • 要呈现的动作不能有任何特定于行的参数(在这种情况下似乎可以添加一个新的空白行)
    • 脚本必须在 .cshtml 文件中(尽管您可以通过在 .cshtml 中设置全局/命名空间变量并将实际代码保存在 .js 文件中来解决此问题)
    • 你需要使用@{}/@()和render/tostring的正确组合

    如果您只想渲染一些 html 而不需要操作,那么使用 @Html.RenderPartial 可能会更好。


    另一种可能更友好的机制是让空白行已经在页面上(可能隐藏)并使用.clone()

    【讨论】:

    • 克隆是一个绝妙的主意!适用于我的物品。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多