我需要使用在代码隐藏中计算的值在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就好了。
也许如果我最终拥有许多这样的方法,我可以把它放在一个部分类中,所以至少它们与其他代码在物理上是分开的。
您建议使用哪种方法易于理解且易于维护?
答案 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关于将服务器变量传递给客户端脚本