【问题标题】:How do I add Asp.Net Server tags to JS and have them evaluated?如何将 Asp.Net Server 标签添加到 JS 并对其进行评估?
【发布时间】:2011-06-27 20:00:08
【问题描述】:

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

为什么上面的脚本没有被添加?

【问题讨论】:

    标签: javascript asp.net-mvc


    【解决方案1】:

    您不能在静态.js 文件中使用诸如&lt;% %&gt; 之类的服务器端包含,这是因为它们不是由ASP.NET 处理的。相反,您可以做的是定义一个控制器操作或一个自定义 Http 处理程序,它将响应 Content-Type HTTP Header 设置为 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>
    

    【讨论】:

    • 我可以按照您的建议使用局部视图并消除创建新操作的需要吗?
    • @Nick,否,因为无法直接访问视图(部分或非部分)。你总是需要一个控制器动作来提供一个视图。
    • 我正在尝试这个,但由于某种原因,似乎没有调用新操作。我创建了一个名为“context”的控制器,并拥有一个名为“index”的动作。我的 contentPlaceHolder
    • 嗯.. 似乎当我将脚本元素添加到我认为的 ContentPlaceHolder 时,该操作永远不会被调用。
    • 如果它是一个大的 .js,我不建议这样做,因为不会缓存动态生成的内容。
    【解决方案2】:

    如果模型设置正确,并且您没有对视图做任何奇怪的事情,您应该能够以这种方式填充 javascript,因为它只会在发送到浏览器时被视为 JavaScript。

    你从上面的代码中得到了什么错误或古怪?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多