จะระบุชื่อพื้นที่ในลิงค์การกระทำได้อย่างไร?


156

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

คำตอบ:


245

คิดออก ..

Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" }, new{})

3
@ Pure.Krome - ใช่ ไม่มีอะไรที่ใช้งานง่ายเกี่ยวกับมัน!
Jeremy

3
ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างก่อนหรือหลังจาก Areaname ไม่อย่างนั้นมันก็จะไม่สนใจมัน ... และจากนั้นจะทำให้คุณสงสัยสี่ชั่วโมงว่ามีอะไรผิดปกติ ..
Piotr Kula

คุณจะเพิ่มพารามิเตอร์ได้อย่างไร
Yorro

สิ่งนี้ดูเหมือนว่าแปลเป็นลิงก์หรือไม่ ฉันหมายถึง - เมื่อมีการแสดงผลแบบฟอร์มและส่งกลับไปยังลูกค้า
FrenkyB

79

บางสิ่งที่ฉันพบหลังจากนี้ฉันคิดว่าคนอื่นอาจพบเจอ: หากคุณต้องการเชื่อมโยงจากภายในพื้นที่กับการกระทำที่ไม่ได้อยู่ในพื้นที่คุณยังต้องระบุพื้นที่เป็นสตริงว่าง

ตัวอย่างเช่นฉันย้ายรหัส MVC บางส่วนไปยังพื้นที่และพบว่าฉันต้องการอัปเดต URL ในหน้าต้นแบบที่อ้างอิงหน้าอื่น ๆ ในเว็บไซต์

หากต้องการระบุ URL ไปยังสิ่งที่ไม่ได้อยู่ในพื้นที่ให้ใช้

Html.ActionLink("home", "Index", new { area = "", controller = "Home" })

4
นี่เป็นเคล็ดลับที่ดีมาก! แต่มันก็ไม่ได้ให้ผลลัพธ์ที่คาดหวังกับ MVC 2 .. การแก้ไขเล็ก ๆ - Html.ActionLink ("บ้าน", "ดัชนี", ใหม่ {area = "", controller = "Home"})
Alexander Beletsky

15

ใช้:

 Html.ActionLink("Text", "ActionName", "ControllerName", new { Area = "AreaName" }, null)

หมายเหตุ : พารามิเตอร์ตัวที่สี่คือการส่งผ่านเส้นทางValuesหากคุณผ่านพารามิเตอร์ที่ว่างเปล่ามันจะพิจารณาโครงสร้างของรูทและถ้าคุณผ่านค่าที่เหมาะสมมันจะใช้เป็นพื้นที่

นอกจากนี้อย่าลืมที่จะใช้nullหรือnew{}เป็นพารามิเตอร์ที่ 5 เพราะผ่านnullหรือnew {}ในขณะที่สร้างลิงค์การกระทำจะไม่เกินวิธีการ(text,action,controller,route data)หรือ(text,action,controller,route data,html attribute)เพื่อให้ใช้วิธีการที่เหมาะสม


11

ในการให้ MVC2 area="root"ทำงานให้ฉันได้ดังต่อไปนี้

Html.ActionLink("Home", "Index", "Home", new { Area = "root" }, new{})

6

เคล็ดลับเรียบร้อยที่คุณสามารถทำได้หากคุณใช้พื้นที่มากในมุมมองกำหนดเป็นตัวแปรที่ด้านบน:

@{ var awesomeArea = new { area = "Awesome" }; }

@Html.Action("Something", "Somewhere", awesomeArea)
@Html.ActionLink("Stuff", "FooBar", awesomeArea)

4

นี่คือสิ่งที่ฉันคิดขึ้นมาเพื่อเป็นแนวทางในการอนุญาตให้ผู้ใช้เชื่อมโยงกับระบบตรวจสอบสิทธิ์ที่สร้างไว้ล่วงหน้า

พื้นที่ของฉันแต่ละแห่งมีไฟล์ _LoginPartial.cshtml เวอร์ชันหนึ่ง

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

มันเป็นเพียงการปรับเปลี่ยนเล็กน้อยเพื่อ loginpartial ที่สร้างขึ้น แต่ดูเหมือนว่าจะทำงานได้ดีเมื่อใช้ในบางพื้นที่

นี่คือรหัสที่ใช้ในพวกเขาทั้งหมด:

@if (Request.IsAuthenticated)
{
    <text>
    Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", new { area = "" }, htmlAttributes: new { @class = "username", title = "Manage" })!
    @using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" }))
 {
        @Html.AntiForgeryToken()
        <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
 }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", new { area = "" }, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

การตั้งค่าการhtmlAttributes:ทำงานอย่างชัดเจนเป็นอย่างดีสำหรับการใช้หลายพารามิเตอร์
เทรวิส J

2

หากคุณไม่สามารถใช้ลิงค์ aplication เว็บแบบมาตรฐานเช่น About, Home, Contac เป็นต้นจากพื้นที่ได้ คุณเปลี่ยนสาย

@Html.ActionLink("Ana Sayfa", "Index", "Home", new { area = "" }, new {})

จาก

ชม \ Shared_Layout.cshtml


1

ในแอป ASP Net Core ของฉันฉันเพียงเพิ่มพื้นที่ในแอตทริบิวต์ html ดังนี้:

@Html.ActionLink("Link Text", "ActionName", "ControllerName", new { Area = "AreaName" , id = @Model.ID, name = @Model.name })

0

การใช้

@Html.ActionLink("DisplayText", "ActionName", "ControllerName", new { area = "AreaName"}, null)

จะบรรลุสิ่งที่คุณเป็น

DisplayText คือสิ่งที่จะแสดง (เหมือนกับ<a href="#">DisplayText</a>), ActionName เป็นวิธีการที่ถูกเรียกในคอนโทรลเลอร์และ ControllerName เป็นตัวควบคุมที่คุณต้องการโทร! พารามิเตอร์ถัดไปคือ 'มูลค่าเส้นทาง' ซึ่งคุณจะเพิ่มพื้นที่ของคุณ หากคุณอยู่ในพื้นที่และต้องการกลับไปที่รูทHome/Indexเช่นคุณจะปล่อยให้ค่าเป็นสตริงว่างเช่นnew { area = ""}ตัวอย่างเช่นคุณจะปล่อยให้ค่าเป็นสตริงที่ว่างเปล่าเช่นค่าสุดท้ายคือ 'คุณสมบัติ Html' และสถานที่ที่คุณจะเพิ่มชั้นเรียนหากคุณต้องการและควรจะเป็นnullถ้าไม่มีคุณสมบัติใด ๆ ที่จะเพิ่ม แต่เป็นพารามิเตอร์สุดท้ายถูกมองว่าเป็น 'คุณสมบัติ Html'; เพื่อให้รู้คุณค่าเส้นทางควรจะเป็นnull

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