2009-08-19 60 views
6

我想從我的代碼後面的文件中讀取C#屬性的值到一些JQuery腳本(請參見下文)。我寫的JQuery選擇器訪問一個ASP.Net GridView,然後訪問gridview中的一個CheckBox字段。每當複選框被選中或取消選中時,代碼被擊中,但我需要從後面的代碼中訪問C#屬性,以根據屬性的值採取適當的操作。將C#屬性讀入JQuery代碼

$(".AspNet-GridView-Normal > td > input").click(function() { 

     //Need to access the C# property here 

     //Take action here based on the value of the C# property 

    }); 
+0

我在Rails中做了這個。 Rails允許你向AJAX請求發送javascript響應 - 一旦接收到,它就會在客戶端執行。然而,生成此JavaScript的代碼可以具有任意嵌入的ruby語句(例如,像訪問屬性以確定輸出)。你可以搜索ASP.Net是否支持類似的東西。 C#屬性只存在於服務器端,所以這個邏輯必須通過服務器端處理完成。 – Gishu 2009-08-19 14:11:27

+0

您需要修改值作爲複選框單擊?因此,如果您將AvailableInstalls設置爲10,那麼您是否需要在單擊複選框時增加/減少變量? – 2009-08-19 14:29:01

+0

是的,每選中一個複選框,變量就需要遞減,每當複選框未被檢查時遞增。 – 2009-08-19 14:46:49

回答

12

這可能是顯而易見的,但後面的代碼不存在於執行jQuery代碼的客戶端。你可以做的是將屬性的值賦給服務器端的隱藏字段,這樣當你需要在客戶端使用jQuery檢查它時,它將可用。所以你可以在客戶端進行以下操作。

標記:

<asp:HiddenField ID="hfValueINeedToKnow" runat="server"/> 

代碼背後:

hfValueINeedToKnow.Value = <some value>; 

的jQuery:

$("#<%= hfValueINeedToKnow.ClientID %>").val(); 

您可能需要進行一些小的改動,以支持一個值網格中的每一行,但希望這解釋了總體思路。

+0

我在閱讀HiddenField的值時遇到問題,下面是我用來訪問它的JQuery代碼: var availableInstalls = $(「#<%= hfAvailableInstalls.ClientID%>」)。 我在後面的代碼中的PageLoad方法中將隱藏字段的值設置爲「2」,但當我以調試模式瀏覽時,我始終爲var AvailableInstall獲取「undefined」的值。任何想法可能造成這種情況? – 2009-08-19 14:44:33

+0

@Russ Clark - HTML中隱藏的輸入字段出現什麼,以及jQuery選擇器中的實際呈現值? – 2009-08-19 15:12:09

+0

至於點,真的很有幫助。謝謝。一直在尋找這種行動的分解。 – wilsonlego 2013-10-24 10:19:22

1

那麼你不能。

您需要在某個元素(可能是一個隱藏的字段)中呈現C#屬性,然後以這種方式來查看它。

但是請進一步解釋:你想要檢查什麼屬性?

+0

該屬性只是在後面的代碼int,如下所示: public int AvailableInstalls {get;組; } – 2009-08-19 14:03:44

+0

好吧,做好隱藏領域的方式吧。馬克Kanof已經給你確切的代碼來做到這一點。 – 2009-08-19 14:05:49

0

過去我爲這個場景所做的工作是將我的代碼值打印到標記中並存儲它在JavaScript變量中的任何內容,從而將它的副本提供給客戶端代碼。這是一個愚蠢的例子,但希望它是有道理的:

<% 
    var messsge = "Hello World!" 
%> 

<html> 
<head> 
<script type="text/javascript"> 
    function ShowMessage() 
    { 
     var msg = '<%= message %>'; 
     if(msg) 
      alert(msg); 
    } 
</script> 
</head> 
</html> 
2

您在評論該值是一個int提及。我看到它也是您的代碼隱藏中的public屬性。現在,這是微不足道的 - 你不需要逃避價值,也不能訪問它在一些迂迴的方式,你會得到類型安全免費:

<script> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = <%= AvailableInstalls %>; 

}); 
</script> 
+0

基於來自OP的後面的評論,「每次檢查複選框時都需要減少變量,並且在每次取消選中複選框時增加」在函數外部聲明JS變量,但這應該很好地工作。 – 2009-08-19 15:09:35

0

沒有一個非常乾淨的方式做這個。您最好的選擇可能是使用內置於ASP.NET中的ClientScript.RegisterClientScriptBlock功能。 Here's a good primer

private int myValue; 

protected void Page_Load(object sender, EventArgs e) { 
    ClientScript.RegisterClientScriptBlock(typeof(Page), 
     "vars", "<script>var myParams = { p1: " + myValue + ", p2: 'My Name' };</script>"); 
} 

這會將提供的腳本放在頁面上朝向窗體的頂部。你也可以改變它。顯然,它不是最漂亮的;你基本上是串聯不同的語言的字符串,但它會起作用,並且對於簡單的變量聲明在眼睛上不太粗糙。

0

ASP嵌入式JavaScript總是讓我感到緊張,從腳本注入攻擊的角度以及無法對您的JavaScript進行單元測試。

這建立在一個ealier答案:

<script type="text/javascript"> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = $("#MyHidden").val(); 

}); 
</script> 

你可以將它移動到一個隱藏的變量:

<input type="hidden" id="#MyHidden" value="<%= AvailableInstalls %>" /> 

然而,這並不周圍注射的問題得到。所以你可以添加一個服務器端的隱藏變量,並通過ASP.NET中的Page_Load事件函數來設置它。你也需要腳本標記中的屬性type =「text/javascript」來使其成爲有效的HTML)。

0

如果你把你的值到一個asp:HiddenField ID爲hfValueINeedToKnow,檢索該值客戶端最簡單的方法是

var jsvar = $("[id$=hfValueINeedToKnow]").val(); 

所以,你也可以將此代碼放在一個單獨的.js文件。