ฉันมีสามค่าที่ฉันต้องผ่านเป็นพารามิเตอร์สำหรับเช่นstrID
, และstrName
strDate
ฉันต้องการเปลี่ยนเส้นทางพารามิเตอร์ทั้งสามนี้ไปยังหน้าอื่นในResponse.Redirect()
. ใครสามารถระบุสตริงการสืบค้นที่ถูกต้องให้ฉันได้หรือไม่?
ฉันมีสามค่าที่ฉันต้องผ่านเป็นพารามิเตอร์สำหรับเช่นstrID
, และstrName
strDate
ฉันต้องการเปลี่ยนเส้นทางพารามิเตอร์ทั้งสามนี้ไปยังหน้าอื่นในResponse.Redirect()
. ใครสามารถระบุสตริงการสืบค้นที่ถูกต้องให้ฉันได้หรือไม่?
คำตอบ:
(ต่อไปนี้เป็นข้อความของส่วนที่เชื่อมโยงของรายการ Wikipedia)
URL ทั่วไปที่มีสตริงการสืบค้นมีดังนี้:
http://server/path/program?query_string
เมื่อเซิร์ฟเวอร์ได้รับคำร้องขอสำหรับเพจดังกล่าวเซิร์ฟเวอร์จะรันโปรแกรม (หากกำหนดค่าให้ทำเช่นนั้น) โดยส่ง query_string โดยไม่เปลี่ยนแปลงไปยังโปรแกรม เครื่องหมายคำถามถูกใช้เป็นตัวคั่นและไม่ได้เป็นส่วนหนึ่งของสตริงแบบสอบถาม
ลิงก์ในหน้าเว็บอาจมี URL ที่มีสตริงการสืบค้นอย่างไรก็ตาม HTML กำหนดวิธีที่เว็บเบราว์เซอร์สามารถสร้างสตริงการสืบค้นได้สามวิธี:
การใช้สตริงแบบสอบถามหลักคือการมีเนื้อหาของรูปแบบ HTML หรือที่เรียกว่าเว็บฟอร์ม โดยเฉพาะอย่างยิ่งเมื่อมีการส่งฟอร์มที่มีฟิลด์ field1, field2, field3 เนื้อหาของฟิลด์จะถูกเข้ารหัสเป็นสตริงเคียวรีดังนี้:
field1=value1&field2=value2&field3=value3...
field1=value1&field1=value2&field1=value3...
สำหรับแต่ละฟิลด์ของฟอร์มสตริงคิวรีประกอบด้วยฟิลด์คู่ = ค่า แบบฟอร์มบนเว็บอาจรวมถึงฟิลด์ที่ผู้ใช้มองไม่เห็น ฟิลด์เหล่านี้รวมอยู่ในสตริงแบบสอบถามเมื่อส่งแบบฟอร์ม
อนุสัญญานี้เป็นข้อเสนอแนะของ W3C W3C ขอแนะนำให้เว็บเซิร์ฟเวอร์ทั้งหมดสนับสนุนตัวคั่นอัฒภาคนอกเหนือจากเครื่องหมายและตัวคั่น [6] เพื่ออนุญาตสตริงการสืบค้น application / x-www-form-urlencoded ใน URLs ภายในเอกสาร HTML โดยไม่ต้องมีเอนทิตียกเว้นเครื่องหมายแอมเพอร์แซนด์
ในทางเทคนิคเนื้อหาแบบฟอร์มจะถูกเข้ารหัสเป็นสตริงแบบสอบถามเมื่อวิธีการส่งแบบฟอร์มคือ GET การเข้ารหัสเดียวกันจะถูกใช้โดยค่าเริ่มต้นเมื่อวิธีการส่งคือ POST แต่ผลลัพธ์จะไม่ถูกส่งเป็นสตริงเคียวรีนั่นคือจะไม่ถูกเพิ่มลงใน URL การดำเนินการของฟอร์ม แต่สตริงจะถูกส่งเป็นเนื้อหาของคำขอ HTTP
Query String: ?strID=XXXX&strName=yyyy&strDate=zzzzz
ก่อนที่คุณจะเปลี่ยนเส้นทาง:
string queryString = Request.QueryString.ToString();
Response.Redirect("page.aspx?"+queryString);
ลองแบบนี้น่าจะใช้ได้
Response.Redirect(String.Format("yourpage.aspx?strId={0}&strName={1}&strDate{2}", Server.UrlEncode(strId), Server.UrlEncode(strName),Server.UrlEncode(strDate)));
~mypage.aspx?strID=x&strName=y&strDate=z
สามารถทำได้โดยใช้:
Response.Redirect("http://localhost/YourControllerName/ActionMethodName?querystring1=querystringvalue1&querystring2=querystringvalue2&querystring3=querystringvalue3");
ฉันใช้ AbsoluteUri และคุณจะได้รับสิ่งนี้:
string myURI = Request.Url.AbsoluteUri;
if (!WebSecurity.IsAuthenticated) {
Response.Redirect("~/Login?returnUrl="
+ Request.Url.AbsoluteUri );
หลังจากที่คุณเข้าสู่ระบบ:
var returnUrl = Request.QueryString["returnUrl"];
if(WebSecurity.Login(username,password,true)){
Context.RedirectLocal(returnUrl);
มันทำงานได้ดีสำหรับฉัน