2012-03-06 34 views
8

Theo this question, nên anh phải để có thể viết một cái gì đó như thế này:Việc sử dụng các thuộc tính dữ liệu HTML-5 có bị hỏng trong ASP.NET MVC 4 (beta) không?

@Html.ActionLink("Delete", "Delete", "Message", new { data_id=id, @class="delete" }) 

hoặc như một người dùng T4MVC hạnh phúc có thể làm:

@Html.ActionLink("Delete", MVC.Message.Actions.Delete(), new { data_id=id, @class="delete" }) 

Và có được gạch dưới trong "data_id" thay thế trong khi hiển thị:

<a href="/message/delete" class="delete" data-id="42">Delete</a> 

Tuy nhiên, điều này dường như không hoạt động trong MVC 4 beta. Bất cứ ai khác nhìn thấy vấn đề này?

Đây có phải là sự thay đổi có chủ ý không và nếu có, tôi nên làm gì?

CẬP NHẬT - cách sửa chữa (bằng tay)

tôi đã áp dụng các thay đổi sau vào file T4MVC.tt, mà sửa chữa vấn đề trong mã được tạo:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, ActionResult result, object htmlAttributes, string protocol = null, string hostName = null, string fragment = null) { 
    //was: return ActionLink(htmlHelper, linkText, result, new RouteValueDictionary(htmlAttributes), protocol, hostName, fragment); 
    return htmlHelper.RouteLink(linkText, null, protocol, hostName, fragment, result.GetRouteValueDictionary(), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); 
} 

CẬP NHẬT 2 - FIX AVAILABLE

David Ebbo đã phản ứng nhanh với the reported issue và đã sáp nhập vào sửa chữa ở trên vào T4MVC.

CẬP NHẬT 3 - Vá FIX

Khá embarassingly, sửa chữa ban đầu đệ trình đã làm trong thực tế không hoạt động, vì nó vẫn gọi là tình trạng quá tải không hợp lệ. Bây giờ tôi đã sửa đổi mã để làm giống như MVC thực hiện nội bộ (sử dụng phương thức trợ giúp của họ), và thông báo cho David để có nó bao gồm trong T4MVC. Lấy 2.6.70 từ codeplex hoặc cập nhật bằng NuGet khi được phát hành, có thể không lâu.

+0

Tôi thích viết trực tiếp Delete .. @ Html.ActionLink() không thân thiện với giao diện người dùng. –

+0

Nhưng không phải là

Trả lời

5

Hãy thử

@Html.ActionLink("Delete", "Delete", "Message", null, new { data_id=id, @class="delete" })

Tôi nghĩ rằng bởi vì tất cả các quá tải nó được giả định tham số thứ 4 của mình là tham số routeValues.

+0

Có, tôi tin rằng đây là câu trả lời đúng. Tôi có data- * thuộc tính làm việc trong dự án MVC4 của tôi, nhưng đã bị vấp phải bởi quá tải ActionLink nhiều lần – kaveman

+0

Đó là một gợi ý hợp lý, nhưng tôi thực sự sử dụng phần mở rộng T4MVC có ActionResult, và điều này không có quá tải cho tuyến đường giá trị (tất cả được chứa trong ActionResult). Do đó tôi tự tin rằng tôi thực sự chuyển biến vào tham số htmlAttributes. Cập nhật bài viết để hiển thị như thế nào tôi thực sự sử dụng nó (chỉ không muốn nhầm lẫn hình ảnh với T4MVC). –

+0

Này, ai biết. Bạn đúng rồi. T4MVC phải gọi quá tải sai trong MVC4. Cảm ơn! –

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