如何将Asp.Net Server标记添加到JS并对其进行评估?

时间:2011-06-27 20:00:08

标签: javascript asp.net-mvc

我有一个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>

为什么没有添加上述脚本?

2 个答案:

答案 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。

您从上述代码中获得了哪些错误或嗜好?