最佳实践 – 从Code-Behind设置jQuery属性

我需要使用在代码隐藏中计算的值在jQuery命令中设置单个属性。 我最初的想法是只使用来访问它,如下所示:

的.aspx

  $('.sparklines').sparkline('html', { fillColor: 'transparent', normalRangeMin: '0', normalRangeMax:  });  

.aspx.cs

 protected string NormalRangeMax() { // Calculate the value. } 

有趣的是,必须从ASPX页面调用才能获得单个值。 更不用说我有一个完整的方法只需要填充单个属性进行小计算。

另一种方法是使用clientScriptManager.RegisterClientScriptBlock在代码隐藏中创建整个块。 但我真的不喜欢把整个JavaScript块放在代码隐藏中,因为它的JavaScript就好了。

也许如果我最终拥有许多这些方法,我可以将它放在一个部分类中,所以至少它们与其余代码在物理上是分开的。

您建议使用哪种方法易于理解且易于维护?

<%%>工作正常。 我做的一件事是在页面上的隐藏字段中设置一个值(然后编写必要的javascript以提取该值),这很好,因为我可以通过javascript更改该隐藏字段,当/如果页面回发我可以从后面的代码中获取新值。

如果需要按需调用方法,可以对ASP.NET WebMethod执行jQuery AJAX调用以获取数据并重新填充各种选项。 你可以在这里找到一个关于如何做到这一点的好教程: http : //encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

下面是一些使用隐藏字段方法的示例代码(使用datepicker控件,但你会得到这个想法):

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>       

而Page_Load方法背后的代码:

 protected void Page_Load(object sender, EventArgs e) { // Set Value of Hidden Field to the first day of the current month. this.hfTest.Value = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).ToString("MM/dd/yyyy"); } 

就个人而言,我会使用<%%>方法。 这就是观点。 我根本不喜欢RegisterClientScriptBlock。 如果你搬到MVC,你会习惯<%%> … 🙂

我不久前遇到了这个问题。 我推荐<%%>作为单变量的东西。 我发现RegisterClientScriptBlock函数只有在我需要代码隐藏来确定运行哪些脚本时才有用。

Rick有一篇关于将服务器变量传递给客户端脚本的好文章