我有一个javascript文件,我动态地将其包含在ASP.NET MVC视图中。这个脚本设置了一些javascript变量,我想从中得到它们的值和HTML帮助器。
以下设置js变量等于包含'<%'的字符串。应该如何格式化,以便在包含此文件时评估服务器标记? 谢谢!
var testPortal = ns.TestPortal;
testPortal.context = {};
testPortal.context.currentUserId = "<%= Html.GetCurrentUserId() %>";
testPortal.context.currentHwid = "<%=Model.Hwid %>";
testPortal.context.currentApplicationId = "<%= Html.GetCurrentApplicationId(Model.ProductName) %>";
更新
我正在尝试实施Darin在下面提供给我的解决方案。新操作正在运行(通过键入url直接测试)。然而,当我尝试在我的视图上使用contentPlaceHolder创建脚本标记时,从不调用该操作。脚本标记永远不会添加到视图中。
有人可以告诉我为什么会这样吗?
<asp:Content ID="Content3" ContentPlaceHolderID="DynamicIncludes" runat="server">
<script type="text/javascript" src="<%= Url.Action("Index","Context", new{applicationName = Model.ProductName, hwid = Model.Hwid}) %>">
alert("helloo");
</script>
</asp:Content>
为什么没有添加上述脚本?
答案 0 :(得分:4)
您不能在静态<% %>
文件中使用.js
等服务器端包含,因为它们不由ASP.NET处理。你可以做的是定义一个控制器动作或一个自定义的Http处理程序,它将响应Content-Type
HTTP标头设置为text/javascript
,它可以提供动态内容。例如:
例如:
public ActionResult MyDynamicJs()
{
return View();
}
和MyDynamicJs.aspx
内部可以使用服务器端标记:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<% Response.ContentType = "text/javascript"; %>
var testPortal = ns.TestPortal;
testPortal.context = {};
testPortal.context.currentUserId = "<%= Html.GetCurrentUserId() %>";
testPortal.context.currentHwid = "<%=Model.Hwid %>";
testPortal.context.currentApplicationId = "<%= Html.GetCurrentApplicationId(Model.ProductName) %>";
现在剩下的就是将控制器动作包括在内:
<script type="text/javascript" src="<%= Url.Action("MyDynamicJs", "SomeController") %>"></script>
答案 1 :(得分:0)
如果模型设置正确并且您没有对视图做过一些非常奇怪的事情,您应该能够以这种方式填充javascript,因为它只会在发送到浏览器时被视为JavaScript。
您从上述代码中获得了哪些错误或嗜好?