繁体   English   中英

ASP.NET MVC3-从动作动态创建JavaScript

[英]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.ActionUrl.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.

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