我正在与剃刀使用时具有HTML辅助困难。说佣工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)

展开详细编译器输出显示揭示了:

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'

这表明,我认为剃刀不喜欢我的帮手,IncrementalMenu,返回void(工作在MVC 2 Web表单引擎的观点罚款)。

我得到在编译时没有错误,尽管代码行(@ Html.IncrementalMenu(...))的红色下划线以下消息:

Cannot implicitly convert type 'void' to 'object'

IncrementalMenu处于Wingspan.Web.Mvc命名空间。它的签名是如下:

public static void IncrementalMenu(this HtmlHelper html, MenuBlock menuBlock)
{
    // Uses an HtmlTextWriter to render a menu from the sitemap
}

我如果我知道炸飞什么是错的......

PS:

在MenuBlock参数仅仅是一个枚举,用于标识菜单应该呈现。不注视此,因为这是细

有帮助吗?

解决方案

您可以打电话给你的助手这样的:

@{ Html.IncrementalMenu(MenuBlock.Site); }

的WebForms语法

<% Html.IncrementalMenu(MenuBlock.Site); %>

您只需拨打你的方法,并返回值(如果有的话)将被忽略。

这样的代码需要一个返回值,返回值写入到HTML流:

@Html.YourHelper()

Web表单语法:

<%: Html.YourHelper() %>

同样,如果结果值= IHtmlString:

<%= Server.HtmlEncode(Html.YourHelper()) %>

其他提示

附录:

您可以得到相同或相似,误差@ Html.RenderPartial。在这种情况下,它是由于直接的RenderPartial呈现到响应的事实,所以不是字符串和需求的“剃刀代码块”内将被编码:

@{
   Html.RenderPartial(...);
}

我怀疑是的,微软已经包含在ASP.NET MVC新Html.Partial的原因之一。作为Html.Partial确实返回一个字符串,它是确定写:

@Html.Partial

这看起来好了很多。鉴于剃刀申报的目标之一是要容易对眼睛,这是很可能如此。

这也一种品牌的我,至少,手感更舒适。我知道什么是返回一个字符串,我做这一切的时候。但是,“返回响应”需要一些更多的脑循环每次想起它的时候。

和它与古老的格言适合终于Microsoft获取合适自己的产品版本3. EG,访问97

这是一个按压比喻。产地来源证他们搞砸的事情了4个版本,即,访问2000 ...

您的HTML帮助应该返回MvcHtmlString它代表了HTML为了工作,剃刀(以及其他视图引擎不属于WebFormsViewEngine)正确

public static MvcHtmlString Label(this HtmlHelper html, string expression)
{
    return MvcHtmlString.Create("<label>" + expression + "</label>");
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top