【问题标题】:What the best way to handle server side tags inside of a js file?处理 js 文件中的服务器端标签的最佳方法是什么?
【发布时间】:2010-02-15 17:57:18
【问题描述】:

我正在使用 Asp.NET MVC,并且在整个应用程序中都非常依赖 JQuery(不确定这在这里是否重要)。我正在尝试构建一组 js 库文件来支持我的观点。我面临的问题是我需要一种方法来管理我的所有图像映射和 ajax 调用的文件和操作链接的服务器端位置。

现在,我坚持将所有脚本代码放在每个 aspx 页面中,以便我可以像这样使用服务器端脚本标签:

    $("#StartDate").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: 'button',
        buttonImage: '<%= Url.Content("~/Content") %>/Images/calendar.png',
        buttonImageOnly: true
    });

    function fillDates(periodType, periodOffset)
    {
      $.ajax({
        url: '<%= Url.Action("GetDates", "Tracking") %>',
        dataType: "json",
        data: {"pt": periodType, "po": periodOffset},
        success: function(result){
            if (result.Status == "Success")
            {
                $("#StartDate").val(result.StartDate);
                $("#EndDate").val(result.EndDate);
            }
            else
            {
                alert(result.Status + ": " + result.Message);
            }
        }
      });        
    }

我想将此代码移动到 js 文件中。我将如何做到这一点并且仍然能够映射到我的应用程序的根目录。

【问题讨论】:

  • 您不能将变量位作为参数传递给您的函数吗?例如fillDates(url, periodType, periodOffset);
  • 我已经想到了这一点,并希望尽可能避免这种情况。 url 并不是函数的真正逻辑参数......不过这可能会起作用,感谢您的想法。 :)

标签: javascript jquery asp.net-mvc


【解决方案1】:

您可以将基本 url 放在您的视图中,并从您的 js 文件中引用它

// site.master
var appPath = <%=ResolveUrl("~/")%>;

// *.js
function dosomething()
{ 
    var src = appPath + "content/images/test.png";
    var action = appPath + "controller/action";
}

注意:此方法要求您手动编写操作网址,而不是调用Url.Action()

【讨论】:

  • 我也想到了这一点,但这需要我在每个视图中手动设置 appPath。我正在寻找一种只引用脚本文件的方法,而不需要额外的代码。也许这根本不可能?谢谢你的想法。
  • 您知道有一个视图大师,您可以在其中放置最基本的功能和布局吗?
  • 是的,但是我想要构建的 js 文件都将具有这些相同的参数名称和值。我想我将求助于构建我自己的 http 处理程序(即 jspx),这样我就可以使我的参数与函数保持逻辑关系,并且仍然可以根据需要访问 Url.Action / Url.Content / etc...。再次感谢!
【解决方案2】:

虽然我从未尝试过,但您可以将 .js 文件映射到 ASP.NET 处理程序,并在提供服务时对其进行处理。您如何进行映射取决于 IIS 的版本,您可能会使用 HTTPModule 进行处理。

【讨论】:

  • 不需要,你可以放心地做。也就是说,乔尔·波特说得对,恕我直言。
  • 谢谢大家。我想我会采用这种方法。但是,我不会像 Nir ​​Gavish 建议的那样使用标准的 aspx 扩展,而是创建一个 jspx 扩展,这样我就可以在我的解决方案中保持它的清晰分离。好东西。
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2019-11-08
相关资源
最近更新 更多