2013-05-29 2 views
7

Tôi có một phương pháp điều khiển như thế này:Tại sao ActionLink của tôi không hoạt động?

public ActionResult Foo2(int uId) 
{ 
    return View(); 
} 

bây giờ tôi thêm một liên kết hành động này:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }) 

Nhưng kết quả khi tôi nhấp vào nó là:

.../Main/Foo2?Length=8 

Tại sao đây không phải là làm việc?

Trả lời

5

Bạn đang sử dụng quá tải sai phương pháp ActionLink. Bạn nên sử dụng:

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null) 

Tình trạng quá tải này sẽ được sử dụng làm giá trị tuyến đường chứ không phải là thuộc tính HTML. Tình trạng quá tải bạn đang sử dụng làm giải thích new { uId = 12 } là đối tượng có thuộc tính TML của liên kết hành động. Bằng cách gọi quá tải được chỉ định ở trên, bạn nhập vào null làm thông số thứ năm, thông số này sẽ được sử dụng cho các thuộc tính HTML và đối tượng của bạn làm giá trị tuyến đường.

Chúng ta có thể dễ dàng nhìn thấy những gì đang xảy ra bằng cách nhìn vào những gì được hiển thị:

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }) 
// Renders: <a href="/Home/Foo2?Length=4" uId="12">Test</a> 

@Html.ActionLink("Test", "Foo2", "Home", new { @class = "test-class" }) 
// Renders: <a class="test-class" href="/Home/Foo2?Length=4">Test</a> 

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, null) 
// Renders: <a href="/Home/Foo2?uId=12">Test</a> 

@Html.ActionLink("Test", "Foo2", "Home", new { uId = 12 }, new { @class = "test-class" }) 
// Renders: <a class="test-class" href="/Home/Foo2?uId=12">Test</a> 

Hy vọng điều này xóa nó lên một chút.

+0

điều này đang hoạt động, cảm ơn bạn – gurehbgui

+0

@gurehbgui Bạn được chào đón. –

5

MVC đang gọi quá tải sai, vì nó có một vài phương pháp có cùng số thông số. Hãy thử điều này:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null) 

Xem thêm this question.

+0

Có tôi nhận được để:. .../Main/foo2 nhưng UID là mất tích :( – gurehbgui

+0

@gurehbgui thấy chỉnh sửa Lệnh 'null' nên được thông qua cho tham số cuối cùng, 'htmlAttributes'. – CodeCaster

+0

hiện đang hoạt động, cảm ơn bạn – gurehbgui

0

Theo một khác Stackoverflow Question bạn nên thử theo thứ tự:

@Html.ActionLink("Test", "Foo2", "Main", new { uId = 12 }, null)