2009-01-28 26 views
6

Tôi tạo một số hành động trong bộ điều khiển MVC.URL kết quả ASP.NET MVC Html.ActionLink - cách mã hóa

public ActionResult DoSmth1(string token) 
public ActionResult DoAnother2(string token) 

Và khi tôi phải gọi ActionLink ..

=Html.ActionLink<SomeController>(x=> x.DoSmth(item.property), item.property) 
=Html.ActionLink<AnotherController>(x=> x.DoAnother(item.property), item.property) 

... nó tạo cho tôi các URL khác nhau:

/Some/DoSmth/stringvalue 
/Another/DoAnother?property=stringvalue 

đâu để thiết lập cách thức mà nó được xây dựng một URL? Tôi ALR không có ý tưởng ... ((


OK, một có một số waylight: - nếu tên thuộc tính đều giống nhau mà được sử dụng trong định tuyến schema - ví dụ như bộ điều khiển, hành động và id - MVC sẽ luôn sử dụng xây dựng tuyến đường (/ c/a/id)

Điều đó giúp một chút. (như vậy - tên tham số "id" càng tốt))

Nhưng vấn đề tổng thể vẫn còn hợp lệ ...


phải có tên giống như các thẻ trong con đường

Chính xác - tôi lần đầu tiên có ý tưởng đó.

Nhưng - bây giờ tôi chỉ có tuyến mặc định ({controller}/{action}/{id}) nhưng vẫn có URL có "thuộc tính" trong dấu gạch chéo ... Điều này khá lạ.

  • có cũng là một cách lừa đảo - để tạo ra một lộ trình chính xác phù hợp với một bộ điều khiển được với nó là tên tham số - là dường như đó sẽ là câu trả lời cuối cùng - nhưng tôi vẫn không muốn làm điều này ((

Trả lời

4

Bạn không hiển thị tuyến đường của mình, nhưng bạn gần như chắc chắn đang nhấn các tuyến đường khác nhau trong ví dụ này. Mã thông báo lộ trình có dạng lambda của ActionLink. Bất kỳ thứ gì không khớp với mã thông báo định tuyến sẽ được nối thêm dưới dạng tham số chuỗi truy vấn, giống như với URL thứ hai của bạn. Ame bạn thông qua ngầm ("tài sản" trong trường hợp này) không khớp với một mã thông báo lộ trình. Vì bạn nhận được kết quả khác nhau với cùng một tên mã thông báo, do đó tôi kết luận rằng bạn đang nhấn các tuyến đường khác nhau. Ngẫu nhiên, tôi khuyên bạn nên xây dựng liên kết với RouteLink thay vì ActionLink, để bạn có thể chắc chắn tuyến đường nào bạn sẽ khớp.