ฉันสิ้นสุดด้วยวิธีส่วนขยายที่กำหนดเอง มันน่าสังเกตว่าเมื่อพยายามวาง HTML ไว้ในวัตถุ Anchor ข้อความลิงค์สามารถเป็นได้ทั้งทางซ้ายหรือทางขวาของ HTML ภายใน ด้วยเหตุนี้ฉันเลือกที่จะให้พารามิเตอร์สำหรับ HTML ภายในและด้านซ้าย - ข้อความลิงค์อยู่ตรงกลาง HTML ภายในทั้งด้านซ้ายและขวาเป็นทางเลือก
ส่วนขยายวิธีการ ActionLinkInnerHtml:
public static MvcHtmlString ActionLinkInnerHtml(this HtmlHelper helper, string linkText, string actionName, string controllerName, RouteValueDictionary routeValues = null, IDictionary<string, object> htmlAttributes = null, string leftInnerHtml = null, string rightInnerHtml = null)
{
// CONSTRUCT THE URL
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action(actionName: actionName, controllerName: controllerName, routeValues: routeValues);
// CREATE AN ANCHOR TAG BUILDER
var builder = new TagBuilder("a");
builder.InnerHtml = string.Format("{0}{1}{2}", leftInnerHtml, linkText, rightInnerHtml);
builder.MergeAttribute(key: "href", value: url);
// ADD HTML ATTRIBUTES
builder.MergeAttributes(htmlAttributes, replaceExisting: true);
// BUILD THE STRING AND RETURN IT
var mvcHtmlString = MvcHtmlString.Create(builder.ToString());
return mvcHtmlString;
}
ตัวอย่างการใช้งาน:
นี่คือตัวอย่างของการใช้งาน สำหรับตัวอย่างนี้ฉันต้องการเพียงแค่ html ด้านในทางด้านขวาของข้อความลิงก์ ...
@Html.ActionLinkInnerHtml(
linkText: "Hello World"
, actionName: "SomethingOtherThanIndex"
, controllerName: "SomethingOtherThanHome"
, rightInnerHtml: "<span class=\"caret\" />"
)
ผล:
ผลลัพธ์นี้ใน HTML ต่อไปนี้ ...
<a href="/SomethingOtherThanHome/SomethingOtherThanIndex">Hello World<span class="caret" /></a>