2015-06-20 25 views
0

我想通過C#代碼獲得window.prompt()警告框的應答文件的背後。這只是一段JavaScript代碼,所以我想我甚至可以從代碼隱藏文件中執行它。這對我來說無關緊要,它是.aspx文件中的<script>標記還是通過.aspx.cs文件執行。獲取返回值從JS代碼到C#

我認爲有腳本執行(從C#部分的稱呼),然後有分配到某個不可見場的返回值,但有沒有更好的辦法做到這一點?

最顯而易見的方法可能會去是這樣的:

.aspx file: 
<script> 
function foo() { 
    document.getElementById('MyFieldID').value = window.prompt('Answer this question:', ''); 
} 
</script> 

.aspx.cs file: 
//////////////////////////////////////////////// 
//MyFieldID.Text now contains whatever I want// 
////////////////////////////////////////////// 

你說什麼?有沒有更好的方法?

回答

0

更好路總是意見爲主。我要說的是你有幾個選擇,都取決於你在做什麼。 HTTP和ASP.NET爲我們提供了將數據發送到服務器的一些手段,有3級主要的HTML5之前:

  1. 查詢字符串
  2. 形成價值觀
  3. AJAX調用

如果您在回答提示後將用戶重定向到新頁面,您可以將它們發送到yournewurl.aspx?promptAnswer=*whatever*

如果您正在執行回發,那麼您可以使用表單值(這看起來像是什麼你在做你的例子)。在提交表單之前,您可以在頁面上放置一個<asp:HiddenField>並從JavaScript填充它。

如果你只需要及時反應,但不嘗試重新加載頁面,你可以做一個AJAX調用發送變量到服務器(這仍然使用1號或2發送的數據,它只是沒有重新加載頁面)。

其中的這三個選項的效果最佳取決於具體的實現。但是,您的解決方案應該工作得很好。然而,由於控制你很可能使用到的東西的價值成是HiddenField它會在MyFieldID.ValueMyFieldID.Text。你必須處理的唯一的另一件事是,如果你的MyFieldID嵌套在一些其他控件(如ContentPlaceHolder),使得ClientID的已命名容器假裝它,所以它真的像ContentPlanceHolder1_MyFieldID從JavaScript訪問時。

+0

感謝您的回答,但我不同意這是主觀的。有些事情不過是表現(什麼方式需要更少的內存或其他什麼)是相當客觀的。 – Zim

+0

@Zim同意了。但這取決於你的需求。如果您想爲用戶提供即時反饋並且不重新加載頁面,那麼AJAX就是一種方法。如果您已經提交表單進行回傳,隱藏字段就是要走的路。如果你只是重定向,一個查詢字符串是要走的路。我的觀點是這是主觀的,因爲它取決於情況。既然你沒有提供這種情況,我試圖提供涵蓋不同情況的例子。如果我的回答不包含您的使用案例,請提供更多詳細信息,並很樂意在我的回答中添加更多內容。 – dman2306