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

时间:2009-01-23 03:38:17

标签: asp.net jquery

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

的.aspx

<script type="text/javascript" language="javascript">
$('.sparklines').sparkline('html', {
    fillColor: 'transparent',
    normalRangeMin: '0',
    normalRangeMax: <%= NormalRangeMax() %>
});
</script>

.aspx.cs

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

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

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

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

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

4 个答案:

答案 0 :(得分:4)

&lt; %%&gt;工作良好。我做的一件事是在页面上的隐藏字段中设置一个值(然后编写必要的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" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txtCalendar" runat="server" />
            <asp:HiddenField ID="hfTest" runat="server" />
        </div>
    </form>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>

    <script type="text/javascript" src="http://ui.jquery.com/latest/ui/ui.datepicker.js"></script>

    <script type="text/javascript">
    var dateMinimum = new Date($("#<%= hfTest.ClientID %>").val());

    $(function() {
        $("#<%= txtCalendar.ClientID %>")
            .datepicker({
                minDate: dateMinimum
            });
    });
    </script>
</body>

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");
}

答案 1 :(得分:1)

就个人而言,我会使用&lt; %%&gt;方法。这就是观点。我根本不喜欢RegisterClientScriptBlock。如果您转移到MVC,您将习惯于&lt; %%&gt; ...... :)

答案 2 :(得分:1)

我曾经遇到过这个问题。我推荐&lt; %%&gt;对于单变量的东西。我发现RegisterClientScriptBlock函数只有在我需要代码隐藏来确定要运行哪些脚本时才有用。

答案 3 :(得分:0)

Rick有一个很好的article关于将服务器变量传递给客户端脚本