![](/img/trans.png)
[英]Dynamically create html action links using javascript variables on ASP.NET MVC3 razor
[英]ASP.NET MVC3 - Dynamically create javascript from Action
我有一个MVC3应用程序,其中有一些必须调用MVC操作才能获取数据或重定向页面的javascript函数。
当前,javascript位于cshtml文件中(使用剃刀),因此我可以利用Url.Action(..)
和Url.Content(..)
函数。
如果我想将这些文件分开,我会丢失文件的服务器端编译,因为剃刀引擎显然没有处理.js。
是否可以创建一个cshtml视图并以“ application / javascript”形式返回内容(Reponse.ContentType),还是有另一种方式可以实现所需的结果?
提前致谢
山姆
还是有其他方法可以达到预期效果?
确实有。 设计您的javascript函数,以便它们将这些url作为参数。 然后,您要做的就是将初始化调用留在您的视图中并传递所需的URL:
<script type="text/javascript">
myJsInitialize('@Url.Action("Foo")', '@Url.Content("~/bar")');
</script>
或者另一种可能是将这些网址作为您的JavaScript正在使用的DOM的一部分。 例如,假设您有一个链接,并且希望在单击该链接时发送AJAX请求:
@Html.ActionLink("click me", "someaction", null, new { id = "mylink" })
在单独的js文件中,您将使用已经包含url的链接的href属性:
$('#mylink').click(function() {
$('#result').load(this.href);
return false;
});
但是,例如,如果您需要此函数中的另一个URL,该怎么办? 例如,假设您需要在下拉菜单的部分更改时使用AJAX调用操作。 在这种情况下,您可以在下拉菜单中使用HTML5 data-*
属性:
@Html.DropDownListFor(
x => x.SelectedItem,
Model.Items,
new {
id = "myddl",
data_url = Url.Action("someaction")
}
)
然后在单独的javascript文件中:
$('#myddl').change(function() {
var selectedValue = $(this).val();
var url = $(this).data('url');
$.post(url, { value: selectedValue }, function(result) {
// ...
});
});
看看我们如何不再需要javascript函数依赖于服务器端帮助程序(例如Url.Action
或Url.Content
? 这样,您就可以将它们放在单独的javascript文件中,而不必担心应用程序在将其部署到IIS虚拟目录中时将停止运行。
脚本块的鲜为人知的功能是您可以在块中提供src属性和代码。 因此,您可以执行以下操作:
<script type="text/javascript" src="@Url.Content("~/Scripts/Myscript.js")">
var myurl = `@Url.Action("SomeAction", "SomeController")`;
</script>
然后,您可以在脚本中引用myurl。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.