2009-01-23 52 views
4

我需要使用在代碼隱藏中計算的值在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頁面調用只是獲得一個單一的價值。更不用說我有一個完整的方法,只是爲了填充一個屬性而做一個小小的計算。

一種替代方案是使用clientScriptManager.RegisterClientScriptBlock在代碼隱藏中創建整個<script>塊。但是,我真的不喜歡把JavaScript的所有代碼塊放在代碼隱藏的地方,因爲它是JavaScript。

也許如果我最終有很多這些方法,我可以把它放在一個部分類中,這樣至少它們在物理上與其他代碼是分開的。

你會推薦什麼方法,因爲易於理解和易於維護?

回答

4

<%%>正常工作。我做的一件事是在頁面的隱藏字段中設置一個值(然後編寫必要的javascript來提取該值),這很好,因爲我可以通過javascript更改該隱藏字段,以及何時/如果頁面回傳我可以也可以從代碼中獲得新的價值。

如果您需要根據需要調用方法,您可以對ASP.NET WebMethod執行jQuery AJAX調用來獲取數據並重新填充各種選項。你可以找到關於如何做到這一點這裏一個很好的教程:http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

以下是使用隱藏字段方法的一些示例代碼(使用日期選擇器控制,但你的想法):

<%@ 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

就個人而言,我會使用<%%>方法。這是觀點的目的。我根本不喜歡RegisterClientScriptBlock。如果你曾經移動到MVC,你將習慣<%> ... :)

1

我遇到了這個問題。我建議<%%爲單變量的東西。我發現RegisterClientScriptBlock函數只有在需要使用代碼隱藏來確定要運行哪些腳本時纔有用。

0

裏克有一個很好的article有關將服務器瓦爾到客戶端腳本