2012-11-23 10 views
5

tôi có nhu cầu sử dụng ActionLink liên kết đến màn hình chỉnh sửa ann cho ViewModel A. tôiMVC routeValues ​​động cho ActionLinks

A đã một phím composite, như vậy để liên kết với nó, các giá trị con đường sẽ phải có 3 pramaters, như thế này:

<%: Html.ActionLink("EDIT", "Action", "Controller", 
    new { area = "Admin", Id1= 1, Id2= 2, Id3= 3 })%> 

như bạn có thể thấy, các giá trị đường chứa id rằng hành động điều khiển sẽ chấp nhận.

Tôi muốn để có thể tạo ra các giá trị đường từ một hàm helper, như thế này:

public static Object GetRouteValuesForA(A objectA) 
    { 
     return new 
     { 
      long Id1= objectA.Id1, 
      long Id2= objectA.Id2, 
      long Id3= objectA.Id3 
     }; 
    } 

Và sau đó sử dụng nó trong các helper ActionLink, nhưng tôi không biết làm thế nào để vượt qua kết quả đó để các ActionHelper

objectA = new A(){Id1= objectA.Id1,Id2= objectA.Id2,Id3= objectA.Id3}; 
.... 
<%: Html.ActionLink("EDIT", "Action", "Controller", 
    new { area = "Admin", GetRouteValuesForA(objectA) })%> 

Nhưng điều đó sẽ cần phải hành động điều khiển để chấp nhận rằng loại vô danh thay vì một danh sách các thuộc tính 3

tôi thấy liên kết dưới đây mà hợp nhất s loại vô danh, nhưng có cách nào khác để làm điều này? Merging anonymous types

+0

Bạn không thể chỉ thêm giá trị làm thuộc tính của chế độ xem của mình? –

+0

Có, nhưng tôi chỉ muốn sử dụng hàm để tạo giá trị tuyến đường trong trường hợp định nghĩa của một thay đổi, như tôi cần thêm hoặc xóa các Id tạo nên khóa tổng hợp. Bằng cách đó, tôi sẽ chỉ phải thay đổi các thông số ở một nơi – getit

+0

Xem câu trả lời của tôi :) –

Trả lời

11

Làm thế nào về điều này?

mẫu:

public class AViewModel 
{ 

    public string Id1 { get; set; } 
    public string Id2 { get; set; } 
    public string Id3 { get; set; } 

    public RouteValueDictionary GetRouteValues() 
    { 
     return new RouteValueDictionary(new { 
      Id1 = !String.IsNullOrEmpty(Id1) ? Id1 : String.Empty, 
      Id2 = !String.IsNullOrEmpty(Id2) ? Id2 : String.Empty, 
      Id3 = !String.IsNullOrEmpty(Id3) ? Id3 : String.Empty 
     }); 
    } 
} 

Xem:

<%: Html.ActionLink("EDIT", "Action", "Controller", Model.GetRouteValues())%> 

Bạn bây giờ có thể tái sử dụng chúng càng nhiều càng tốt mà bạn thích và chỉ bao giờ phải thay đổi chúng ở một nơi.

+0

Tuyệt vời, cảm ơn bạn – getit