gpt4 book ai didi

javascript - ASP.NET MVC3 - 从 Action 动态创建 javascript

转载 作者:行者123 更新时间:2023-11-30 08:11:42 25 4
gpt4 key购买 nike

我有一个 MVC3 应用程序,其中我有必须调用 MVC 操作才能获取数据或重定向页面的 javascript 函数。

目前 javascript 位于 cshtml 文件中(使用 razor)所以我可以利用 Url.Action(..)Url.Content(..) 功能。

如果我想将这些文件分开,我会丢失文件的服务器端编译,因为 .js 显然不是由 razor 引擎处理的。

是否可以创建一个 cshtml View 并将内容 (Reponse.ContentType) 作为“application/javascript”返回,或者是否有其他方法可以达到预期的结果?

提前致谢

山姆

最佳答案

or is there another way I can achieved the desired result?

其实是有的。设计您的 javascript 函数,以便它们将这些 url 作为参数。然后你所要做的就是将初始化调用留在你的 View 中并传递所需的 urls:

<script type="text/javascript">
myJsInitialize('@Url.Action("Foo")', '@Url.Content("~/bar")');
</script>

或者另一种可能性是将这些 url 作为您的 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 虚拟目录中时它会停止工作。

关于javascript - ASP.NET MVC3 - 从 Action 动态创建 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9458069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com