2014-10-06 18 views
13

Tôi đã cố gắng để tạo ra một tùy chọn để chuyển đổi giữa một cái nhìn danh sách và xem phụ tùng trong ASP.net MVC (với công cụ xem dao cạo).Thêm hình ảnh trong Html.ActionLink

Tuy nhiên, tôi đang gặp một số rắc rối cố gắng để cả hai thêm hình ảnh, cũng như quy mô nó vào 'đúng chiều cao' (chiều cao giống như tiếp theo bên cạnh).

tôi đang tìm kiếm để tạo ra một cái gì đó như: Kết quả

mong muốn:

--------------------------- -------------------------------------------------- ----

[≡­] List View | [+] Widget View 

--------------------------------------- ------------------------------------------

nơi [≡][+] đã thực sự hình ảnh biểu tượng nhỏ.

Những nỗ lực cho đến nay bao gồm:

Các liên kết hành động là một cái gì đó như:

@Html.ActionLink("List View", "listView", 
    new { @style = "background-image:url('~/Content/Images/listIcon.png')" },null) 

mà chỉ hiển thị văn bản.

Tôi cũng đã cố gắng tạo ra ActionLink như:

<img src="~/Content/Images/listIcon.png" />@Html.ActionLink("List View", "Index") 

nhưng điều này giải quyết trong

a) hình ảnh không phải là một phần của liên kết; và

b) hình ảnh là gần gấp đôi kích thước của văn bản (tương tự như sơ đồ dưới đây)

_ _    _ _ 
|  |    |  | 
| icon |    | icon | 
|_ _| List View | |_ _| Widget View 

tôi sẽ không còn phiền cố gắng để tạo ra nó thích:

Alternative:

------------------------------------------------ ---------------------------------

_ _    _ _ 
|  |    |  | 
| icon | List View | | icon | Widget View 
|_ _|    |_ _| 

nếu tôi .

Có ai biết/tư vấn cách giải quyết/tạo điều này không?

+0

Đầu tiên loại bỏ các '~ 'trong' background-image: url' và bạn ít nhất sẽ thấy biểu tượng của bạn. Bạn sẽ cần một số css khác để di chuyển biểu tượng đến đúng vị trí bạn muốn. – tweray

+0

dấu ngã cho phép bạn không phải viết đường dẫn tệp đầy đủ, phải không? –

+0

Dấu ngã chỉ hoạt động trên một số trường nhất định mà công cụ xem dao cạo có thể xác định là liên kết. Trong trường hợp của bạn '@ style =' chỉ được coi là chuỗi đơn giản và công cụ xem dao cạo sẽ không thực hiện bất kỳ chuyển đổi nào cho nó. Bạn phải vượt qua con đường mà trình duyệt có thể trực tiếp hiểu được. – tweray

Trả lời

24

Bạn có thể sử dụng Url.Action cho siêu liên kết và Url.Content cho nguồn hình ảnh.

Sau đó, bạn có thể tạo kiểu cho giao diện bằng CSS.

enter image description here

<ul class="links"> 
    <li> 
     <a href="@Url.Action("ListView", "Home")" title="List View" class="links"> 
      <img alt="List View" src="@Url.Content("~/Images/ListView.png")"> 
      List View 
     </a> 
    </li> 
    <li> 
     <a href="@Url.Action("WidgetView", "Home")" title="Widget View" class="links"> 
      <img alt="Widget View" src="@Url.Content("~/Images/WidgetView.png")"> 
      Widget View 
     </a> 
    </li> 
</ul> 
<style type="text/css"> 
    ul.links { 
     list-style-type: none; 
    }  
     ul.links li { 
      display: inline-block; 
      border-left: 1px solid black; 
      padding-left: 10px; 
      margin-left: 10px; 
     }  
      ul.links li:first-child { 
       border-left: 0; 
       padding-left: 0; 
       margin-left: 0; 
      } 
</style> 
+0

trông giống như những gì tôi cần! Chúc mừng. không bao giờ được tốt với css, vì vậy điều này đã giúp rất nhiều! :) –

+0

Các tham số đi trong Url.Action là gì? – user2903379

+0

@ user2903379 Tôi không hoàn toàn hiểu câu hỏi của bạn. Bạn có thể vui lòng tạo một câu hỏi mới không? – Win

0

Lý do mã này đã không làm việc:

@Html.ActionLink("List View", "listView", new { @style = "background-image:url('~/Content/Images/listIcon.png')" },null) 

là vì tham số thứ 3 của @ Html.ActionLink là để thêm giá trị tuyến đường bổ sung. Nếu bạn muốn thêm các thuộc tính HTML khác, bạn cần phải sử dụng:

@Html.ActionLink("List View", "listView", null, new { @style = "background-image:url('~/Content/Images/listIcon.png')" }) 

Ngoài ra, như những người khác đã nói, bạn không thể sử dụng ~.

Lưu ý rằng kiểu nội tuyến thường không được chấp nhận, vì cách tốt nhất là tạo lớp CSS chứa hình nền của bạn và thêm lớp làm thuộc tính HTML thay vào đó, nhưng @style cũng sẽ hoạt động ở đây. Thông tin thêm về việc tại sao phong cách nội tuyến là xấu có thể được tìm thấy ở đây: What's so bad about in-line CSS?

5

Bạn cần phải tạo neo bằng tay, và insted của việc sử dụng các @Html.ActinLink helper ... bạn có thể sử dụng @Url.Action helper

<a href="@Url.Action("YourAction", "YourController", null)"> 
    <img src="yourImageSource" style="vertical-align: middle; width: 30px;"> List View 
<a/> | 
<a href="@Url.Action("YourAction", "YourController", null)"> 
    <img src="yourImageSource" style="vertical-align: middle; width: 30px;"> Grid View 
<a/> 

Kích thước của hình ảnh có thể được sửa đổi thông qua CSS.

Url.Action cung cấp cho bạn "liên kết đến hành động của bạn". ActionLink, tạo một liên kết có liên kết đến hành động.

+0

Tôi nghĩ rằng đây cũng là một lời giải thích tuyệt vời, mặc dù tôi nghĩ rằng SO nên có thể cho phép nhiều 'Chấp nhận' trong tình huống này. cảm ơn! –

+2

Thực tế thú vị: Nếu bạn hiểu sai điều này và sử dụng @ Html.Action, mọi thứ sẽ bị hỏng. Hoan hô cho các vòng vô hạn! –

0

Hãy thử điều này:

Html.ActionLink(" ", "Edit", new {id = c.ID}, new { @style = "background:url('../../Images/Menu/edit.png') no-repeat center right; display:block; height: 30px; width: 50px" } 
Các vấn đề liên quan