2012-12-07 157 views
1

問題描述:如何從客戶端訪問服務器端WebControl?

我有一個簡單的對話框,下拉列表和文本框。 根據下拉列表的值,所需值可以是簡單文本,數據庫中的日期或特定文本。 對於第一種情況,我有的簡單的文本框工作得很好。 對於第二種情況,我需要一個日期選擇器。 對於第三種情況,我保留文本框,但我添加了一個自動完成功能。

我的問題是與第二種情況。我試過JQuery Datepicker,它工作正常,但我需要使用不同的(特定於框架的)datepicker,它是服務器端Web UI控件。

當從下拉列表中選擇日期類型時,我隱藏文本框(使用JQuery),並顯示(隱藏)datepicker,反之亦然。隱藏工程很好,但當我嘗試保存時,服務器端的Save函數無法識別DatePicker何時隱藏。 我需要這樣做的原因是因爲我想知道何時從DatePicker或Textbox中保存值,具體取決於當前可見的值。

我試過一切相關的CSS和服務器似乎不能識別這些屬性爲其他任何東西,但真實。

可能的解決方案:

1)我可以做一個「黑客」的解決方案,並添加一個文本框隱藏,並通過它真或假的字符串,每次我切換日期選擇器。這樣我可以檢查保存的文本框的值,以確定日期選擇器是否隱藏。

2)另外一個(目前正在測試它)是建立在我的cs文件一個void函數,它接受一個布爾輸入和設置自定義可見性屬性,我將添加到日期選擇器的框架爲真或假。 每當我切換日期選擇器時,我將使用AJAX調用來調用該函數並更改服務器端的日期選擇器屬性。 但我不知道這個屬性是否會保持改變,直到我點擊保存或它會以某種方式返回到它的默認值。

我的問題: 上面的任何解決方案對你來說都可以嗎?爲什麼? 你能想到更好的嗎?

+0

我不知道是否有可能改變日期選擇器的位置(離開屏幕某處)而不是顯示/隱藏? – alimac83

+1

爲什麼不直接區分下拉列表中的選擇項?你有這些信息,你應該保存哪些價值。 –

+0

@infadelic這是解決方案。我在看到你的帖子前2分鐘就知道了。你一定把你的腦波傳給了我。哈哈。它一直在我面前,但我一直在試圖應用不同的方法... –

回答

0

要關閉這個問題,Infadelic的評論是什麼解決了我的問題。 我發佈它作爲答案接受它更清晰。

你爲什麼不只是區分在你的下拉列表 選擇項目?你有這些信息,你應該保存哪些價值。

這畢竟比我想象的要簡單。

1

我認爲最好的辦法是要始終有3個表單控件在您的網頁,只需使用change事件選擇框切換他們display狀態與jQuery。這樣,您可以在表單驗證過程中簡單地刪除未使用的表單元素,並提交使用的字段。

或者你必須寫某種回傳功能的處理重印形式的那部分每個選擇change被激發。

---編輯---

這裏的形式驗證的例子,你可以使用:

$('form').submit(function(e){ 
    e.preventDefault(); 

    if($('select.group', this).val() == "datepicker"){ 
     // Remove the other elemnts from the DOM 
     $('input.group, textbox.group').remove(); 
    } 

    // Submit the form 
    $(this).submit(); 
}); 

這裏是jQuery的文檔的remove方法:http://api.jquery.com/remove/

+0

我已經在select上使用change事件來切換它們的顯示狀態。問題是,即使日期選擇器被隱藏,我需要知道(服務器端)在用戶點擊保存時它是否隱藏。因爲當我保存時,我必須得到datepicker或普通輸入的值。即使日期選擇器在我調試時隱藏它「顯示」可見。我嘗試使用datepicker.Visible屬性,當我調試時它總是如此。我嘗試使用datepicker.Attributes(「可見」)它仍然無法正常工作。 –

+0

對不起,這就是我的意思是在表單驗證過程中刪除未使用的輸入。例如見編輯。 –

+0

我看到所以你建議刪除控件而不是隱藏它。我會說這會造成另一個問題,就是控制內的價值損失。在用戶在輸入中插入一些文本但決定從select中選擇需要日期的值的情況下。然後出現日期選擇器,我們從屏幕上刪除輸入。但是他決定改回Text,所以我們刪除了日期選擇器並再次添加一個輸入,但是這次他輸入的文本丟失了。如果你只是隱藏它,這不會發生。 –

相關問題