繁体   English   中英

ASP.Net MVC 5:运行时Html.RenderAction(“…”)

[英]ASP.Net MVC 5: Html.RenderAction(“…”) at runtime

我想通过按一个按钮多次添加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附加另一个_FilterRow的PartialView。

今天是这样的: 在此处输入图片说明

就像是:

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

不幸的是无法正常工作。 有任何想法吗?

如果添加一个将部分渲染返回为部分的动作(即, 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在其自己的文件中,则仅将Razor文件中的小JS的URL传递给URL之类的东西。)

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

看看呈现的html,看看有什么问题。

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

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

这假定了许多潜在的问题:

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

如果您只想呈现一些html并且不需要执行任何操作,则使用@Html.RenderPartial可能会更好。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM