2010-05-24 36 views
10

Có ai có thể giải thích tại sao những điều sau xảy ra? Và làm thế nào để giải quyết, Visual Studio 2010 và MVC2Asp.Net MVC ActionLink

<%= Html.ActionLink("Add New Option", "AddOption", "Product", new { @class = "lighbox" }, null)%> 

Kết quả trong

/sản phẩm/AddOption? Class = lightbox

<%= Html.ActionLink("Add New Option", "AddOption", "Product", new { @class = "lighbox" })%> 

Kết quả trong

/Sản phẩm/AddOption? Chiều dài = 7

Cảm ơn

Trả lời

20

Bạn đang sử dụng những quá tải tương ứng:

public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper, 
string linkText, 
string actionName, 
string controllerName, 
Object routeValues, 
Object htmlAttributes 
) 

Từ: http://msdn.microsoft.com/en-us/library/dd504972.aspx

public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper, 
string linkText, 
string actionName, 
Object routeValues, 
Object htmlAttributes 
) 

Từ: http://msdn.microsoft.com/en-us/library/dd492124.aspx

Đầu tiên new { @class = "lighbox" } được truyền như đối số routeValues khi nó phải là đối số htmlAttributes.

Loại sự cố này phổ biến với các phương pháp mở rộng được sử dụng trong MVC. Trong đôi khi có thể giúp đỡ để sử dụng tên đối số (C# 4.0) để làm cho mọi việc dễ đọc hơn:

<%= Html.ActionLink(linkText: "Add New Option", 
    actionName: "AddOption", 
    controllerName: "Product", 
    htmlAttributes: new { @class = "lighbox" }, 
    routeValues: null)%> 
9

Đây là một ví dụ về "tình trạng quá tải địa ngục" trong ASP.NET MVC.

Mã đầu tiên gọi phương thức sau đây:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    Object routeValues, 
    Object htmlAttributes 
) 

trong khi mã thứ hai gọi điều này là một:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    Object routeValues, 
    Object htmlAttributes 
) 

Chú ý rằng các tham số chuỗi controllerName trong cuộc gọi đầu tiên đang trở thành routeValues trong lần thứ hai một. Giá trị chuỗi "Sản phẩm" đang được chuyển đến các giá trị được định tuyến: thuộc tính chuỗi Length được sử dụng, có chiều dài là 7 ở đây, do đó "Độ dài = 7" bạn đang nhận được trong tuyến đường.

Xem xét phương pháp đầu tiên, có vẻ như bạn đã hoán đổi các thông số routeValueshtmlAttributes.

Các vấn đề liên quan