2012-03-12 80 views
0

屬性我有一個隱藏的變量在我的aspx頁面如下圖所示。閱讀HTML在asp.net

<input type="hidden" value="" runat="server" id="homeExcelData" filename=""/> 

點擊按鈕,iam做一個form.Sumbit();

之前提交,我設置隱藏的控制下面的屬性。

document.getElementById("homeExcelData").attributes["filename"] = "test.xls"; 
          $("#homeExcelData").attr("filename","test.xls"); 
          $("#homeExcelData").prop("filename","test.xls"); 
          alert($("#homeExcelData").attr("filename")); 
          $("#homeExcelData").val(excelData); 

在後面的代碼,回傳過程中,我可以通過homeExcelData.Value我在JavaScript設置得到excelData。

但屬性「文件名」的值來爲空字符串(不爲空),而不是「TEST.XLS」。

請幫我解決這個問題。

服務器端代碼:

string fileName = homeExcelData.Attributes["filename"] ?? "report.xls"; 
+0

當postpack時,值將會丟失。所以你應該在ViewState中保存值。 – sinanakyazici 2012-03-12 09:49:51

回答

1

以上爲我工作。我認爲正在發生的事情是,在你的提交按鈕值以某種方式得到重新初始化回發(您的添加屬性的JavaScript加載兩次移動到服務器端對我的作品)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // Set attribute on page Load 
     homeExcelData.Attributes.Add("filename","test.xls"); 
    } 
} 

protected void btnCheckValues_Click(object sender, EventArgs e) 
{ 
    Response.Write(homeExcelData.Attributes["filename"].ToString()); 

} 
+1

如果我們將它添加到代碼隱藏中,那麼它工作正常。如果我們在JavaScript中添加它,做了from.Sumbit(),而不是button_click – Raghav 2012-03-14 05:38:32

+1

我想添加一個attibute和值客戶端,以便它正在變成空的可能無法得到呈現的頁面上出現問題。 – 2012-03-14 06:02:57

2

你覺得爲什麼文件名屬性值應該是服務器POST請求的一部分?

(它只會是視圖狀態值的一部分,如果你將它設置服務器端)

我還會有一個隱藏字段「homeExcelDataFileName」,並使用它的值。

希望這會有所幫助,

+0

那就對了。但是,當form.Submit()完成後,視圖狀態將在aspx頁面中刷新並重建並提交回服務器。 如果您通過js向控件添加值,它將作爲control.Value來到服務器。這意味着對於某些HTML屬性,視圖狀態可以很好地重建。但是對於自定義HTML屬性,viewstate不會刷新。 所以基本上我需要一些技巧來使asp.net讀取自定義屬性並將其打包到控件的視圖狀態中。那麼它會自動到服務器。 – Raghav 2012-03-14 06:17:41

+0

它不只是文件名,我需要添加更多的自定義屬性。可能是我需要重建我的價值作爲一個複雜的JSON這些屬性。 – Raghav 2012-03-14 06:19:43

+0

視圖狀態不應該被修改或重建客戶端。據我所知,在發佈post請求之前,submit()不會改變視圖狀態。 ViewStateMac在這裏幫助檢查(「無效的ViewState」)。 您可以使用一些JS來收集,編碼和「包」在一些隱藏字段哪個值將被解密的服務器端改變你的控制功能,您的數據。 – jbl 2012-03-15 09:00:24