วิธีการส่งผ่านพารามิเตอร์หลายตัวในสตริงการสืบค้น


92

ฉันมีสามค่าที่ฉันต้องผ่านเป็นพารามิเตอร์สำหรับเช่นstrID, และstrNamestrDate

ฉันต้องการเปลี่ยนเส้นทางพารามิเตอร์ทั้งสามนี้ไปยังหน้าอื่นในResponse.Redirect(). ใครสามารถระบุสตริงการสืบค้นที่ถูกต้องให้ฉันได้หรือไม่?

คำตอบ:


113

Query_string

(ต่อไปนี้เป็นข้อความของส่วนที่เชื่อมโยงของรายการ Wikipedia)

โครงสร้าง

URL ทั่วไปที่มีสตริงการสืบค้นมีดังนี้:

http://server/path/program?query_string

เมื่อเซิร์ฟเวอร์ได้รับคำร้องขอสำหรับเพจดังกล่าวเซิร์ฟเวอร์จะรันโปรแกรม (หากกำหนดค่าให้ทำเช่นนั้น) โดยส่ง query_string โดยไม่เปลี่ยนแปลงไปยังโปรแกรม เครื่องหมายคำถามถูกใช้เป็นตัวคั่นและไม่ได้เป็นส่วนหนึ่งของสตริงแบบสอบถาม

ลิงก์ในหน้าเว็บอาจมี URL ที่มีสตริงการสืบค้นอย่างไรก็ตาม HTML กำหนดวิธีที่เว็บเบราว์เซอร์สามารถสร้างสตริงการสืบค้นได้สามวิธี:

  • รูปแบบเว็บผ่านองค์ประกอบ ...
  • แผนผังรูปภาพฝั่งเซิร์ฟเวอร์ผ่านแอตทริบิวต์ ismap บนองค์ประกอบที่มีโครงสร้าง
  • การค้นหาที่จัดทำดัชนีผ่านองค์ประกอบที่เลิกใช้แล้วในขณะนี้

แบบฟอร์มเว็บ

การใช้สตริงแบบสอบถามหลักคือการมีเนื้อหาของรูปแบบ HTML หรือที่เรียกว่าเว็บฟอร์ม โดยเฉพาะอย่างยิ่งเมื่อมีการส่งฟอร์มที่มีฟิลด์ field1, field2, field3 เนื้อหาของฟิลด์จะถูกเข้ารหัสเป็นสตริงเคียวรีดังนี้:

field1=value1&field2=value2&field3=value3...

  • สตริงการสืบค้นประกอบด้วยชุดของคู่ค่าฟิลด์
  • ภายในแต่ละคู่ชื่อฟิลด์และค่าจะถูกคั่นด้วยเครื่องหมายเท่ากับ เครื่องหมายเท่ากับอาจถูกละเว้นหากค่าเป็นสตริงว่าง
  • ชุดของคู่คั่นด้วยเครื่องหมาย '&' (หรืออัฒภาค ';' สำหรับ URL ที่ฝังใน HTML และไม่ได้สร้างโดย ... ; ดูด้านล่าง) แม้ว่าจะไม่มีมาตรฐานที่ชัดเจน แต่เว็บเฟรมเวิร์กส่วนใหญ่อนุญาตให้เชื่อมโยงหลายค่ากับฟิลด์เดียว:

field1=value1&field1=value2&field1=value3...

สำหรับแต่ละฟิลด์ของฟอร์มสตริงคิวรีประกอบด้วยฟิลด์คู่ = ค่า แบบฟอร์มบนเว็บอาจรวมถึงฟิลด์ที่ผู้ใช้มองไม่เห็น ฟิลด์เหล่านี้รวมอยู่ในสตริงแบบสอบถามเมื่อส่งแบบฟอร์ม

อนุสัญญานี้เป็นข้อเสนอแนะของ W3C W3C ขอแนะนำให้เว็บเซิร์ฟเวอร์ทั้งหมดสนับสนุนตัวคั่นอัฒภาคนอกเหนือจากเครื่องหมายและตัวคั่น [6] เพื่ออนุญาตสตริงการสืบค้น application / x-www-form-urlencoded ใน URLs ภายในเอกสาร HTML โดยไม่ต้องมีเอนทิตียกเว้นเครื่องหมายแอมเพอร์แซนด์

ในทางเทคนิคเนื้อหาแบบฟอร์มจะถูกเข้ารหัสเป็นสตริงแบบสอบถามเมื่อวิธีการส่งแบบฟอร์มคือ GET การเข้ารหัสเดียวกันจะถูกใช้โดยค่าเริ่มต้นเมื่อวิธีการส่งคือ POST แต่ผลลัพธ์จะไม่ถูกส่งเป็นสตริงเคียวรีนั่นคือจะไม่ถูกเพิ่มลงใน URL การดำเนินการของฟอร์ม แต่สตริงจะถูกส่งเป็นเนื้อหาของคำขอ HTTP


34
Query String: ?strID=XXXX&strName=yyyy&strDate=zzzzz

ก่อนที่คุณจะเปลี่ยนเส้นทาง:

string queryString = Request.QueryString.ToString();

Response.Redirect("page.aspx?"+queryString);

15

ลองแบบนี้น่าจะใช้ได้

Response.Redirect(String.Format("yourpage.aspx?strId={0}&strName={1}&strDate{2}", Server.UrlEncode(strId), Server.UrlEncode(strName),Server.UrlEncode(strDate)));


5

สามารถทำได้โดยใช้:

Response.Redirect("http://localhost/YourControllerName/ActionMethodName?querystring1=querystringvalue1&querystring2=querystringvalue2&querystring3=querystringvalue3");

1
@DalijaPrasnikar "ลิงก์" นี้เป็น URL ที่ชี้ไปยัง localhost และเป็นส่วนหนึ่งของคำตอบ กรุณาอย่า "robo-review"
ElGavilan

1

ฉันใช้ 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);

มันทำงานได้ดีสำหรับฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.