ASP.NET

OnClientClick with Validation in ASP.Net

OnClientClick with Validation on ASP.Net

เมื่อ input ต้องการ validate รวมถึงการ confirm พร้อมๆกันจะทำอย่างไร ในเมื่อการใส่อย่างใดอย่างหนึ่งก็สามารถทำงานได้ในตัวของมันเอง แต่หากนำมันมารวมกัน ก็จะพบว่าการ validate input นั้นไม่ทำงาน

OnClientClick with Validation in ASP.Net

มีวิธีการแก้ไข 2 วิธี
1. ให้ alert confirm input ก่อน แล้วค่อยทำการ validate วิธีนี้ต้องใส่โค๊ดด้านล่างไว้ที่ Page_Load

btnSubmit.Attributes.Add("onclick", "if(confirm('do this ?') == false) return false;");

2. ให้ validate ก่อน แล้วค่อย alert confirm input ให้ใส่โค๊ดนี้ในส่วนของ asp:Button

OnClientClick="if (Page_ClientValidate('vd1')){return confirm('Are you sure you want to perform this action?')}"

OnClientClick with Validation in ASP.Net
สำหรับ page ไหนที่มี ValidationGroup หลายตัว ให้ใส่ชื่อ group นั้นใน Page_ClientValidate(‘….’) ด้วย แต่ถ้ามี group เดียวก็ปล่อยว่างได้ครับ
สามารถอธิบายในส่วน if (Page_ClientValidate()) ได้ว่า ถ้าผ่านการ validate เรียบร้อยแล้ว จะทำงานในส่วนของภายใน if ดังนั้นถ้า validate ไม่ผ่าน ก็จะไม่เกิดอะไรขึ้นในส่วนนี้ครับ

ขอบคุณ
msdotnetsupport
stevekinsey

หวังว่าข้อมูลนี้จะเป็นประโยชน์ไม่มากก็น้อยนะครับ

Method Post on Code Behide with asp.net (แก้ปัญหาภาษาไทย)

จากเนื้อหาเก่า Method Post on Code Behide with asp.net มีปัญหาในการส่งข้อมูลประเภทภาษาไทย ดังนั้นในส่วนของการ encode ให้ทำแบบนี้ วิธีนี้ได้มาจาก krucode.net ครับ

1
2
System.Text.Encoding encoder= System.Text.Encoding.GetEncoding(65001);
byte[] byteData = encoder.GetBytes(outputBuffer);

เมื่อเอามารวมกันเต็มๆก็จะเป็นแบบโค๊ดด้านล่างครับ

1
2
3
4
5
6
7
8
9
10
11
12
13
string responseString = "";
string outputBuffer = string.Format("msg={0}&senderemail={1}&sendername={2}&tel={3}",mail.Msg, mail.SenderEmail, mail.SenderName, mail.Tel);
WebClient postWebClient = new WebClient();
postWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string postUrl = "http://localhost:53680/aspgod/contact_receive.aspx";
 
// encode
System.Text.Encoding encoder= System.Text.Encoding.GetEncoding(65001);
byte[] byteData = encoder.GetBytes(outputBuffer);
 
byte[] responseArray = postWebClient.UploadData(postUrl, "POST", byteData);
responseString = System.Text.Encoding.ASCII.GetString(responseArray);
Response.Write(responseString);

สำหรับคนที่ส่งสัยว่าทำไมต้องเป็นเลข 65001 ให้ตามมาดูที่ System.Text.Encoding.GetEncoding(WhatValidStrings) ได้เลยครับ

Method Post on Code Behide with asp.net

การส่งข้อมูลระหว่าง page สามารถทำได้ 2 วิธี

1. get method

2. post method

สำหรับแบบ get ใครๆก็ทำได้ แค่เรียก url แล้วใส่ parameter ตามหลังไป เช่น www.aspgod.com/view.aspx?id=30 กรณีนี้อาจไม่ปลอดภัยเพราะแค่เปลี่ยน parameter ก็สามารถเข้าถึงหน้าต่างๆได้ หากเราต้องการความปลอดภัยของข้อมูลที่มากกว่านี้ แนะนำให้ใช้ method post

การส่งแบบ post โดยปกติในรูปแบบของ html ก็สามารถทำได้ง่ายแค่เปลี่ยนหัวของ form แต่หากเป็น aspx และเราต้องการนำข้อมูลนั้นๆมาประมวลผลก่อนแล้วค่อยส่งไปหน้าอื่นๆ เราต้องทำผ่าน code behide แล้วค่อยส่งข้อมูลไปยังหน้าอื่นโดยใช้ WebClient เข้ามาช่วย ตามตัวอย่างข้างล่างเลยครับ

1
2
3
4
5
6
7
8
9
10
string responseString = "";
string outputBuffer = string.Format("msg={0}&senderemail={1}&sendername={2}&tel={3}",mail.Msg, mail.SenderEmail, mail.SenderName, mail.Tel);
WebClient postWebClient = new WebClient();
postWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string postUrl = "http://localhost:53680/aspgod/contact_receive.aspx";
 
byte[] byteData = System.Text.Encoding.Default.GetBytes(outputBuffer);
byte[] responseArray = postWebClient.UploadData(postUrl, "POST", byteData);
responseString = System.Text.Encoding.ASCII.GetString(responseArray);
Response.Write(responseString);

เป็นระบบส่ง mail โดยการส่งไปให้หน้า contact_receive.aspx เป็นผู้ส่งเมลล์ให้ หากส่งสำเร็จก็จะ Response.Write(“success”); กลับมา ทำให้เราตรวจสอบได้ว่าถูกต้องหรือไม่ หากทำตามตัวอย่างนี้ก็สามารถส่งข้อมูลผ่าน method post ด้วย code behide ได้ครับ

javascript escape() encode url ภาษาไทย

นานๆจะได้ลองเล่น Ajax ดู ก็เลยเกิดปัญหาที่ต้องส่งข้อมูลจาก javascript ไปยัง page อื่นเพื่อประมวลผล จริงๆจะไม่ใช้ Ajax ก็ได้ครับ แต่อารมณ์นั้นมันอยากลองของน่ะ เอาวิธีการใช้งาน Ajax จาก inoomzaa มาเล่นดูอ่ะ คือมันก็ใช้งานได้ดีกว่า .net 2.0 แต่มามีปัญหากับ .net 1.1 คงเพราะเป็น default encoding แหละครับ แก้ไปทุกกระบวนท่าใน page ขารับแล้วก็ไม่ได้ซักครั้ง จึงต้องใช้ท่าไม้ตาย เดินไปถามหัวหน้า(พี่ตู้) จึงได้คำตอบมาว่าให้ใส่ escape() ครอบข้อมูลในขาส่งไปยัง page ด้วย เพื่อ encode ก่อน เพราะภาษาไทยมีปัญหาเรื่องนี้ตลอดเลย ใช่ว่าจะหาคำตอบได้ง่ายๆ คนไทยเวลาพบปัญหาก็ไม่โพสวิธีการแก้ปัญหา พอไปหาเว็บนอก มันก็ไม่เจอปัญหาแบบที่คนไทยเจออีก เพราะของเค้าเป็นภาษาอังกฤษ ลองดูตัวอย่างโค๊ดนะครับ

1
2
// นี่เป็น javascript ในขาส่งครับ
xmlHttp.open("get","http://localhost/WEB/UtilPage/ResponseManualMsg.aspx?msg="+escape(Criteria.value),true); // ใช้ escape เข้าช่วย
1
2
// ส่วนนี่เป็นหน้า .aspx ในขารับ ธรรมดามากมาย
Response.Write(Request["msg"]); // ไม่ต้องแปลงอะไรเลย

เสร็จสมบูรณ์อย่างสวยงาม เสียเวลาไปตั้ง 2 วันแน่ะ ไว้วันหลังจะหาวิธีการใช้ ajax ที่ดีกว่านี้มาให้ดูนะครับ

string.IndexOf and string.SubString example code

เอาตัวอย่างการใช้งาน IndexOf กับ SubString มาให้ดูกันอีกซักตัวอย่าง โดย code ตัวนี้เอาไว้แยก string ออกเป็น 2 ตัวด้วย “||” วิธีปกติผมจะ Replace || ด้วย | จากนั้นค่อย SubString ด้วยตัว | อีกครั้ง ซึ่งก็ได้ผลลัพธ์ที่ถูกต้องเช่นกัน แต่นี่ก็เป็นอีกวิธีหนึ่งครับ เป็นการดูว่าตัว || อยู่ในตำแหน่งไหนของ string แล้วค่อยแยก string ออกเป็น 2 ตัวด้วยตำแหน่งของ || ครับ ลองดูตัวอย่าง น่าจะเข้าใจนะครับ

1
2
3
4
5
6
7
8
9
10
11
12
string body = "1234||http://www.aspgod.com";
 
int indexSub = body.IndexOf("||");
if (indexSub != -1)
{
    string msg = body.Substring(0, indexSub);
    string url = body.Substring(indexSub + 2, body.Length - indexSub - 2);
 
    Response.Write(indexSub + "<br/>"); // 4
    Response.Write(msg + "<br/>"); // 1234
    Response.Write(url + "<br/>"); // http://www.aspgod.com
}

ผม write ผลลัพธ์ออกมา 3 ตัว
1. ตำแหน่งของ ||
2. string ชุดแรกที่ตัดออกมา
3. string ชุดสองที่ตัดออกมา

Web Service Access Denied on localhost

ผมพบปัญหานี้เมื่อใช้ .NET Framework 1.1 เป็น web service และใช้ app จากในเครื่องเดียวกันในการเรียกใช้ web service นั้น ได้รับ error เป็น 401 access denied วิธีแก้ไขอาจมีหลายวิธีก็ได้ครับ แต่ผมพบวิธีแก้ปัญหาแล้วนั่นคือ เข้าไป set ที่ IIS แล้วปรับในส่วนของ Authentication Methods ให้เป็น Anonymous Access ครับ เท่านี้ก็จะสามารถเข้ามาใช้งาน web service ในเครื่องตัวเองได้
IIS Setting Anonymous Access

How to use string.SubString in .NET

มีตัวอย่างการใช้ SubString ของ .NET มาให้ดูครับ จริงๆแล้วมันก็ไม่ได้ยากอะไรหรอก เพียงแต่หลายๆคนอาจจะสับสนว่าต้องใช้ parameter อะไรบ้าง และใช้อย่างไร

นี่เป็นตัวอย่างเล็กๆที่น่าจะทำให้ทุกคนเข้าใจได้ อย่าประหลาดใจล่ะ ว่าทำไมผมถึงให้ตัวแปรมีค่าเป็นแบบนั้น แบบว่าทำงานเกี่ยวกับ mobile ก็เอาซะหน่อย :D คงไม่ต้องอธิบายอะไรกันมากมายนะครับ ดูผลลัพธ์แล้วน่าจะเข้าใจกันทุกคน

โชคดีครับผม
มีอะไรก็ถามละกัน ^ ^

1
2
3
4
5
string shortcode = "388805301";
Response.Write(shortcode.Substring(0,7) + "<br/>");     // result : 3888053
Response.Write(shortcode.Substring(7, 2) + "<br/>");    // result : 01
Response.Write(shortcode.Substring(2) + "<br/>");       // result : 8805301
Response.Write(shortcode.Substring(7) + "<br/>");       // result : 01

string.Equals compare with string.Compare Asp.Net

When compare the string with not sure that the case of the string like (“aAa”, “aaa”, “AAA”). Normally I used the string.ToLower() to manage this problem but there’re many way to solved this. Look at my code below.

1
string.Compare(s1, s2, true)

This function return integer.
s1 > s2 then return 1
s1 < s2 then return -1 s1 = s2 then return 0 The 3rd pamerater is the "ignoreCase" then set it true to non-case sensitive Example

1
2
3
4
5
6
7
8
9
10
11
12
13
string s1 = "aAa";
if (s1.Equals("aaa")) // false because the case sensitive
{
    // do something
}
else if (s1 == "aaa") // false because the case sensitive
{
    // do something
}
else if (string.Compare(s1, "aaa", true) == 0) // true enable non-case sensitive
{
    // do something
}

2 Languages Website by ASP.NET

This is a simple trick to make a 2 Languages Website. You have to get to real path then put the querystring after that path. Let’s see this example.

Put this code at the Page_Load in the MasterPage File or any page you want.

string[] allKey = Request.QueryString.AllKeys;
string qString = “?”;
for (int i = 0; i < allKey.Length; i++) { if (allKey[i].ToLower() != "lang") { { qString += allKey[i] + "=" + Request.QueryString[allKey[i]] + "&"; } } } hrefThai.HRef = Request.Url.AbsoluteUri.Split('?')[0] + qString + "lang=th"; hrefEng.HRef = Request.Url.AbsoluteUri.Split('?')[0] + qString + "lang=en";

Pointer in C# (.NET) and why .NET not allow to use as safe

I tried to use pointer in C# because I use to do the same in C++. But I cann’t do this in .NET (C#) cause the pointer is unsafe with every reason.
1. Pointer can point to every address.
2. If you cann’t control the pointer well as “Memory Leak” then you will get the memory problem.
3. You will get the error If you destry one object and there were some pointer still point to that object. That pointer will point to null.

The problem above show the unsafe of pointer then .Net not allow to use it. Because of most reason to use pointer will use for the low level programming. So C++ or VB6 will be better to use it. :D

I have searched the google and found one reference site that explain why you cann’t use pointer in .NET. This article is awsome. Let’s see this reference : unsafe .NET pointer