2016年12月5日 星期一

asp.net - 驗證控制項 -- RadioButtonList +TextBox 雙重驗證?

asp.net - 驗證控制項 -- RadioButtonList +TextBox 雙重驗證?

dotblogs.com.tw/mis2000lab/2016/10/16/validator_radiobuttonlist_textbox_20161016



一個RadioButtonList , 選項分別是A和B
下方還有一個TextBox,
當選擇A時, 若TextBox無輸入任何值,可以放行
但選擇B時, 如果TextBox是無輸入任何值,則進行驗證(必填)

今天在論壇上看見的問題  不知道我這樣的解法行不行?
Q: 一個RadioButtonList , 選項分別是A和B
下方還有一個TextBox,
當選擇A時, 若TextBox無輸入任何值,可以放行
但選擇B時, 如果TextBox是無輸入任何值,則進行驗證(必填)
===================================================




.ASPX 畫面檔
        AutoPostBack="True"
OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
            A
            B
       
       

       
       

        RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="必填欄位">
       

       

       

後置程式碼
    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(RadioButtonList1.SelectedValue == "A")
        {
            RequiredFieldValidator1.Enabled = false;
        }
        else
        {
            RequiredFieldValidator1.Enabled = true;
        }
    }

驗證(防呆)的話,最好還是透過 "前端程式" 來驗證,比較節省資源



 
 
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ
請看我們的「售後服務」範圍(嚴格認定)
......................................................................................................................................................
......................................................................................................................................................

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!微軟MVP --MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課


Xamarin入門的第一個範例

Xamarin入門的第一個範例
dotblogs.com.tw/mis2000lab/2016/09/21/xamarin_first_sample_for_beginner

只會寫 Windows Form或是 ASP.NET Web Form,有機會快速轉移、快速開發手機程式(Mobile App)嗎?
Xamarin「免費」與 Visual Studio 2015整合,給您一個新選擇
對於寫過 Windows Form or ASP.NET Web Form的朋友、或是使用 C#的朋友
使用 Xamarin來撰寫手機 Mobile App應該覺得似曾相似,甚至熟悉度很高

Xamarin號稱可以  :   (詳見:https://www.thinkpower.info/xamarin/ )
  • 以C# 開發,編譯成iOS與Android原生執行碼,非HTML5解決方案
  • 任何Objective-C(iOS)與Java(Android)可以做的,Xamarin都可以做到
  • 執行效能100%與原平台程式(Objective-C,Java)所開發的一樣
  • 結合Microsoft Visual Studio開發工具,讓開發更方便、快速

Xamarin售價不便宜,幸好2016年二月微軟買下,並免費整合在 Visual Studio裡面
      微軟2月才剛買下跨平台開發工具Xamarin,宣佈將整合到Visual Studio所有版本,包括免費的社群版(Community Edition)、專業版及企業版。
      Xamarin Studio for OS X除了整合Visual Studio 各版本及MSDN訂閱服務內,也將包含在社群版內免費提供。
 ==== 以下是採用 VS 2015 Update 3的操作畫面 =================

專案建立好之後,先測試一下環境能否運作?不要寫任何程式,我們直接建置專案(如下圖)並且執行這個空專案。
提醒您,
1.  建置時間很長,因為要啟動手機模擬器(類似VM或是啟動另一套OS),所以請您耐心等候。就算您的電腦CPU很強,也需要一段時間。
2.  如果您使用  Win 10家用版,或是沒有 Hyper-V,就會採用以下的手機模擬器 (AVD_Galaxy_ToolsForApacheCordova ...... 如下圖)
3.  如果您安裝的OS是專業版(含更高階版本)就可以安裝 Hyper-V,使用其他 手機模擬器。

第一個看見的檔名是 MainActivity.cs 
您可以看見 OnCreate事件,可以把他想成 ASP.NET Web Form的 Page_Load事件(請放心,這裡不會有 PostBack  :-p  )

 MainActivity.cs個檔案的內容其實跟其他檔案有密切關係。
如下圖,「主畫面」可以對應 \Resources\layout\main.axml檔案。

簡單的說,畫面上的控制項弄好以後,可以寫程式,是不是跟  Windows Form or Web Form很類似呢?

如果您自己新增一個 Button按鈕,
以下圖的 ID為例,他會在另一個檔案 (Resource.Designer.cs)  自動產生這個ID的編號(獨一無二的編號)
Resource.Designer.cs 千萬不要自己動手去改,請讓程式自動產生這些編號......千萬不要自己動手去改

撰寫主畫面(Main.axml)時,也可以接換到設計模式
      從左邊的「工具箱」把控制項拉到畫面來用......是不是跟  Windows Form or Web Form很類似呢?

接下來就要撰寫「後置程式碼」了
Sorry......不好意思,ASP.NET Web Form寫久了,有些名詞用習慣,暫時改不過來

以前寫ASP.NET Web Form,按下 Button按鈕以後,程式要寫在 Button_Click事件內
現在改成 Xamarin其實大同小異。

檔案MainActivity.cs
 protected override void OnCreate(Bundle bundle)
 {
      base.OnCreate(bundle);
      // Set our view from the "main" layout resource
      SetContentView(Resource.Layout.Main);
      // Get our button from the layout resource, and attach an event to it  畫面上的第一個按鈕
      Button button = FindViewById
      // 畫面上的第二個按鈕。其實是模仿上一個按鈕改寫的
      Button button2 = FindViewById(Resource.Id.MyButton2);
      // 模仿上面第一個按鈕的範例,自己改寫......按下按鈕,就會觸發這個動作(事件)
      button2.Click += delegate { button2.Text = string.Format("今天是 {0}", DateTime.Now.ToLongDateString()); };

  }
回憶一下,您在 ASP.NET Web Form有沒有用過 .FindControl()方法?用來抓取畫面上的控制項?或是大型控制項「樣版裡面」的子控制項?

回憶一下,按下 ASP.NET Web Form -- Button按鈕的 Click事件,也能寫成這樣
跟上面程式比對一下,是否很相似?
  • VB語法  -- AddHandler Button1.Click, AddressOf myEventHandler
  • C#語法  -- Button1.Click += new System.EventHandler(this.myEventHandler);
(詳見Youtube教學影片 https://youtu.be/GtI8P0Onods 


下圖是執行結果:

補充資料:
  • 台灣微軟 Xamarin研討會    http://www.microsoft.com/taiwan/vstudio/Xamarin/ 
  • (中文) 投影片 & 影片下載    https://onedrive.live.com/?id=FB49C7CED61BD893%212016&cid=FB49C7CED61BD893

  • 台灣微軟範例(中文)    https://msdn.microsoft.com/zh-tw/library/dn879698.aspx
  • .NET 標準函式庫支援 Xamarin 囉!    https://blogs.msdn.microsoft.com/msdntaiwan/2016/09/02/net-standard-library-support-for-xamarin/

我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ
請看我們的「售後服務」範圍(嚴格認定)

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!微軟MVP --MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課



[YouTube影片] 我的 GridView有「新增」功能

[YouTube影片] 我的 GridView有「新增」功能

dotblogs.com.tw/mis2000lab/2016/11/02/gridview_insert_template_2016

SqlDataSource做不到、做不好的地方#2 -- 我的 GridView有「新增」功能
很容易讓初學者"走火入魔"的範例  Orz
附上 Youtube教學影片

這個範例有幾個讓我印象深刻的地方:
第一,我忘記出處。
      當年找範例並沒有想到出書、或是寫 Blog,所以並沒有紀錄原作者的資料,實在很抱歉
      現在我找到範例,都會在程式碼裡面,著名出處,甚至是書本名稱。
      要向發明這個範例的作者致敬,非常有趣的好範例

第二,看見這個範例的初學者 很容易 "走火入魔"
      很多讀者、上課學員,看了這個範例,發現:這麼簡單就能做出「原廠GridView」做不到的功能
      從此就走火入魔、就瘋了
     
      以後每作任何一個功能,就會來問「我這個功能一定要寫在 GridView裡面,請教我!」
      這種執迷不悟的學員,被我教訓者,多矣!
      因為人數頗多,我後來上課就再也沒講過這範例了,圖個耳根清淨

第三,完整的程式碼與步驟,另一位微軟MVP -- KK Bruce 陳傳興老師有發表,請參閱他的文章:
 這個範例最重要的關鍵,就是:
     我們可以透過「控制」資料來源、「控制」 DataBinding,讓大型控制項的「樣版」被我們操控

** 當我們設定 GridView1.DataSourceID = "SqlDataSource1" ,畫面上的 GridView控制項就會呈現資料

**  當我們設定 GridView1.DataSourceID = null  (VB語法為 Nothing) ,畫面上的 GridView控制項因為沒有資料,就會呈現 EmptyDataTemplate樣版
    我們剛好在這邊藏了一個 DetaislView做新增(設定 DefaultMode屬性 = Insert)

類似的範例,之前也發表過:

SqlDataSource做不到、做不好的地方

youtu.be/P7AKhH-9YrE  (YouTube影片)

如果能把這兩個範例一起看、一起學習,
就會知道是相同的技巧:
  



我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ
請看我們的「售後服務」範圍(嚴格認定)
......................................................................................................................................................
事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課