gpt4 book ai didi

asp.net-mvc - 如何在帮助器 View 中使用 HtmlHelper 扩展

转载 作者:行者123 更新时间:2023-12-03 02:24:25 24 4
gpt4 key购买 nike

我想创建一个 Razor 助手来减少我需要编写的代码量。我在项目中添加了一个 App_Code 文件夹,并添加了一个名为 MyHelpers.cshtml 的文件,其中包含以下内容(用于说明目的的简单示例)...

@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper HomeLink() {
@Html.ActionLink("Home", "Index", "Home")
}

但是,这会产生编译器异常,表示 Html.ActionLink 不存在需要三个字符串的重载。 ActionLink 代码是从 Razor 页面复制的,它运行良好。当我尝试在我自己的助手中使用任何其他标准助手时,我遇到了类似的问题。

如果我尝试使用 Telerik 的 KendoUI 的 MVC 包装器(如 @Html.Kendo.ComboBox 一样引用),那么我会在 Html 下看到一条红线,并显示一条消息“无法转换实例类型 System.Web.WebPages” .Html.HtmlHelper 到 System.Web.Mvc.HtmlHelper"

根据本博文末尾的注释,这是 MVC3 的一个已知问题,但应该会在下一个版本中添加...

http://weblogs.asp.net/scottgu/asp-net-mvc-3-and-the-helper-syntax-within-razor

根据此 UserVoice 页面,该问题实际上已在 VS2013 中得到解决...

http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3670180-support-helper-extensionmethod-this-htmlhelper-ht

我正在一个全新的 MVC5 项目中使用 VS2013 Update 4,但它似乎不起作用。我已经尝试了很多在这里找到的解决方法,但没有任何帮助。

有人有什么想法吗?

最佳答案

呃。 View 中的助手是令人厌恶的。微软根本不应该创造这种可能性。执行此类操作的真正方法是创建扩展或使用部分扩展。

扩展

public static class HtmlHelperExtensions
{
public static MvcHtmlString HomeLink(this HtmlHelper helper, string linkText = "Home")
{
return helper.ActionLink(linkText, "Index", "Home");
}
}

那么,在你看来:

@Html.HomeLink()

或者

@Html.HomeLink("This is my awesome Home link.")

部分

Views\Shared\_HomeLink.cshtml中:

@Html.ActionLink("Home", "Index", "Home")

那么在你看来:

@Html.Partial("_HomeLink")

此方法允许覆盖。例如,假设您希望主页链接在商店部分内的 View 上转到网站商店部分的“主页”,您可以添加一个新的部分 View ,Views\Store\_HomeLink.cshtml:

@Html.ActionLink("Home", "Index", "Store")

对于 Views\Store 中的任何 View ,此 View 将优先于 Views\Shared 中的 View 。

但是,对于这样的事情,任何一种方法都实在是太过分了。不要过度追求“DRY”。您可以使用行号作为粗略的指导。如果您的抽象需要与您正在抽象的代码一样多的行,那么您应该非常仔细看看它是否值得。抽象的代码可能会改变吗?它有复杂的逻辑吗?像调用 Html.ActionLink 这样的事情非常简单,并且通过抽象它不太可能提供任何真正的投资返回率。

测试是看待这个问题的另一种方式,因为 DRY 的目的实际上是减少需要测试的代码量。从这个角度来看,Html.ActionLink 已经经过 Microsoft 的彻底测试。除了直接破坏方法签名(Intellisense 会立即警告您)之外,您无法真正破坏它。然而,通过创建辅助函数、部分函数等,您现在引入了复杂性。这是新代码,可能会因多种原因而失败。如果您的抽象引入了原本不需要的复杂性和新测试。然后,你应该再次退后一步,认真思考这是否值得。

关于asp.net-mvc - 如何在帮助器 View 中使用 HtmlHelper 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com