พารามิเตอร์ Url.Action?


116

ในตัวควบคุมรายชื่อฉันมี

 public ActionResult GetByList(string name, string contact)
 {        
     var NameCollection = Service.GetByName(name);    
     var ContactCollection = Service.GetByContact(contact);           
     return View(new ListViewModel(NameCollection ,ContactCollection));
 }

ในหน้า ASPX ฉันเรียก

 <a href="<%:Url.Action("GetByList","Listing" , new {name= "John"} , new {contact="calgary, vancouver"})%>"><span>People</span></a>

ฉันมีปัญหาในรหัส ASPX ... ฉันสามารถดึงระเบียนสำหรับชื่อ john แต่เมื่อฉันให้contact="calgary, vancouver"หน้าเว็บเกิดข้อผิดพลาด

ฉันจะเรียกพารามิเตอร์สองตัวในไฟล์Url.Action. ฉันลองด้านล่าง แต่ดูเหมือนว่าจะผิดเช่นกัน

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>

คำตอบ:


207

ต่อไปนี้คือเกินที่ถูกต้อง (ในตัวอย่างของคุณคุณจะหายไปปิด}ไปยังrouteValuesวัตถุที่ไม่ระบุชื่อเพื่อให้รหัสของคุณจะโยนข้อยกเว้น):

<a href="<%: Url.Action("GetByList", "Listing", new { name = "John", contact = "calgary, vancouver" }) %>">
    <span>People</span>
</a>

สมมติว่าคุณใช้เส้นทางเริ่มต้นสิ่งนี้ควรสร้างมาร์กอัปต่อไปนี้:

<a href="/Listing/GetByList?name=John&amp;contact=calgary%2C%20vancouver">
    <span>People</span>
</a>

ซึ่งจะเรียกใช้การGetByListกระทำของคอนโทรลเลอร์ได้สำเร็จผ่านพารามิเตอร์สองตัว:

public ActionResult GetByList(string name, string contact) 
{
    ...
}

@ user787788 คุณได้รับปัญหาอะไร? คุณหมายถึงอะไรไม่ยอมรับพารามิเตอร์ที่สอง ? ใครเป็นคนไม่ยอมรับ? คุณได้รับข้อความแสดงข้อผิดพลาดหรือไม่ การกระทำของคอนโทรลเลอร์ของคุณไม่ได้รับผลกระทบหรือไม่? คุณได้รับค่าที่ผิดหรือไม่? เฉพาะเจาะจง.
Darin Dimitrov

เมื่อฉันให้สองพารามิเตอร์หน้า aspx จะไม่กดปุ่มคอนโทรลเลอร์ด้วยซ้ำ พบข้อผิดพลาดในหน้านั้นเอง ฉันมีข้อยกเว้น defalut ที่เรียกว่าสิ่งที่หายไป aspx ไปที่นั่น
user787788

@ user787788 ข้อผิดพลาดคืออะไร? คุณได้รับข้อความที่แน่นอนหรือไม่
Darin Dimitrov

ข้อผิดพลาดคือคุณอาจพิมพ์ที่อยู่ (URL) ไม่ถูกต้อง
user787788

2
@DarinDimitrov ฉันรู้ว่านี่เป็นโพสต์เก่ามากแต่ฉันเห็นว่าคุณออนไลน์ ฉันไม่คิดว่าคุณจะรู้วิธีส่งพารามิเตอร์แบบไดนามิก (ไม่ใช่ฮาร์ดโค้ดเช่น "John")?

8

สิ่งนี้ใช้ได้กับ MVC 5:

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>

4

คุณสามารถส่งคืนคอลเล็กชันส่วนตัวชื่อ HttpValueCollection ได้แม้เอกสารจะระบุว่าเป็น NameValueCollection โดยใช้ยูทิลิตี้ ParseQueryString จากนั้นเพิ่มคีย์ด้วยตนเอง HttpValueCollection ทำการเข้ารหัสให้คุณ จากนั้นเพียงแค่ต่อท้าย QueryString ด้วยตนเอง:

var qs = HttpUtility.ParseQueryString(""); 
qs.Add("name", "John")
qs.Add("contact", "calgary");
qs.Add("contact", "vancouver")

<a href="<%: Url.Action("GetByList", "Listing")%>?<%:qs%>">
    <span>People</span>
</a>

0

นี่เป็นอีกวิธีง่ายๆในการทำ

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID'>Print</a>

@Model.IDพารามิเตอร์อยู่ที่ไหน

และนี่คือตัวอย่างที่สอง

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.