当与Razor一起使用时,我遇到了Html Helpers的困难.所述助手在MVC 2中与web表单视图引擎一起工作良好.但不是剃须刀.我在运行时得到的错误是:
Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
Source Error:
Line 1: @using Wingspan.Web.Mvc;
Line 2: @Html.IncrementalMenu(MenuBlock.Site)
Run Code Online (Sandbox Code Playgroud)
展开显示详细编译器输出显示:
d:\...\Views\Shared\MenuTop.cshtml(2,1): error CS1502: The best overloaded method match for 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' has some invalid arguments
d:\...\Views\Shared\MenuTop.cshtml(2,7): error CS1503: Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult'
Run Code Online (Sandbox Code Playgroud)
这向我表明剃刀不喜欢我的助手,IncrementalMenu,返回void(在MVC 2 Web表单引擎视图中工作正常).
我在编译时没有出现任何错误,尽管代码行(@ Html.IncrementalMenu(...))带有以下消息的红色下划线:
Cannot implicitly convert type 'void' to 'object'
Run Code Online (Sandbox Code Playgroud)
IncrementalMenu位于Wingspan.Web.Mvc命名空间中.它的签名如下:
public static void IncrementalMenu(this HtmlHelper html, MenuBlock menuBlock)
{
// Uses an HtmlTextWriter to …Run Code Online (Sandbox Code Playgroud) MVC的新手,并且已经在asp.net网站上运行了教程.
它们包含一个自定义html帮助程序示例,用于截断表中显示的长文本.
只是想知道人们使用HTML帮助程序提出了哪些其他解决方案,以及在创建/使用它们时是否有任何最佳实践或要避免的事项.
作为一个例子,我正在考虑编写一个自定义助手来格式化我需要在各个地方显示的日期,但我现在担心可能有一个更优雅的解决方案(我的模型中的IE DataAnnotations)
有什么想法吗?
编辑:
我刚才想到的另一个潜在用途......字符串连接.自定义帮助程序可以将userID作为输入并返回用户全名...结果可以是(标题)(第一个)(中)(最后)的某种形式,具体取决于哪些字段可用.只是一个想法,我还没有尝试过这样的事情.