2013-11-21 59 views
3

我設置通過JavaScript隱藏提交值,如下隱藏的字段值已更新但未在代碼隱藏中顯示更新的值?

<script lang="JavaScript" type="text/javascript"> 
function ChangeVal() 
{ 
    var elem = document.getElementById("btnDownloadStream"); 
    if (elem.value == "Start") 
    { 
    elem.value = "Stop"; 
    document.getElementById('myHiddenInput').value = "1"; 
    } 
    else 
    { 
    document.getElementById('myHiddenInput').value = "0"; 
    elem.value = "Start"; 
    } 
} 

我試圖讓代碼隱藏字段的值後面。我的代碼是

HiddenField myHiddenInput = (HiddenField)Page.FindControl("myHiddenInput"); 
var val = myHiddenInput.Value; 

在此行之前,我打電話給一個函數,它創建並生成GetResponseStream()。在做這件事的時候,我無法從服務器控件中獲得價值。爲什麼?

+0

'在此行之前,我調用了一個創建並生成GetResponseStream()的函數。':所以你說如果你不這樣做,它會起作用嗎? –

+0

是的Michael 如果我不調用GetResponseStream()方法,那麼我能夠查看更新的值。 –

+0

好的,那麼在問題中包含該代碼可能非常重要。 –

回答

0

確保你的隱藏字段有runat="server"屬性..

+0

我隱而未現提交的頁面是在服務器端運行只喜歡 的 我能看到更新後的值UI。但在代碼中顯示舊值 –

0

您忘記ViewState。如果您使用java腳本代碼更改隱藏字段中的數據,則ViewState不會得到此更改,這就是爲什麼您無法在代碼後面獲得正確值的原因。

+0

嘗試禁用頁面上的ViewState。 您可以在web.config中添加此 <頁面的EnableViewState = 「假」/> 此外,我建議你這篇文章: http://msdn.microsoft.com/en-us/library/ms972976。 aspx 還有禁用視圖狀態的說明。 –

0

設置的Runat = 「服務器」,如下圖所示屬性爲您的隱藏字段:

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

然後更新您的javascript函數如下圖所示:

function ChangeVal() { 
      var elem = document.getElementById("btnDownloadStream"); 
      if (elem.value == "Start") { 
       elem.value = "Stop"; 
       document.getElementById('<%=myHiddenInput.ClientID%>').value = "1"; 
      } 
      else { 
       document.getElementById('<%=myHiddenInput.ClientID%>').value = "0"; 
       elem.value = "Start"; 
      } 
     } 

現在你可以直接訪問您的隱藏字段值在您的代碼後面不使用Page.FindControl如上所述:

var val = this.myHiddenInput.Value; 

更新:

有一件事我注意到,你的按鈕是服務器端的按鈕,並在你的JavaScript調用

var elem = document.getElementById("btnDownloadStream"); 

我覺得應該是

var elem = document.getElementById('<%=btnDownloadStream.ClientId%>') 

否則你總是會得到的值其他部分

請確定情況並非如此。

+0

是的,我也嘗試過這種方法。 我的代碼是 保護無效btnDownloadStream_Click(對象發件人,EventArgs的) { 變種VAL = this.myHiddenInput.Value; (val ==「1」) { HttpWebRequest request =(HttpWebRequest)WebRequest.Create(url);如果(val ==「1」) if HttpWebResponse fileResp =(HttpWebResponse)request.GetResponse(); stream = fileResp.GetResponseStream(); var resp = HttpContext.Current.Response; 使用(VAR FS =新的FileStream(VideoPathFile,FileMode.Create)){ \t //代碼放在這裏 }} } 比 –

+0

不工作?你有什麼異常? – SpiderCode

+0

不,我沒有得到任何錯誤。只是它顯示了舊的價值。當第一次按鈕點擊我設置值= 1,第二次值= 0.但它仍然顯示值= 1代碼後面,但在UI它的顯示值= 0 –

0

因爲改變javascript中的值不會影響服務器端的值。

,如果你想改變的JavaScript服務器端值:您可以嘗試以下

// Javascript 
var myHidden = document.getElementById("<%:myHiddenId.ClientId%>"); 
myHidden.value = myJSVariable; 

確保myHidden是服務器控件。

0

如果您在頁面中使用​​,也會發生這種情況。如果是這種情況,請將HiddenField放入​​中,然後重試。

0

well @Vishweshwar Kapse回答了你的問題。

將您的隱藏字段放在更新面板中,不要忘記在觸發器中添加按鈕的單擊事件。