噩梦试图将HtmlHelper传递给帮助者

时间:2013-06-28 03:24:19

标签: asp.net-mvc-4 html-helper

我正在尝试将HtmlHelper对象传递给我自己的帮助器方法,因此我可以在自己的帮助器中调用Html.TextBox。我想这样做是因为TextBox方法接受一个htmlAttributes对象,这是一种动态添加属性的简单方法。这在我的特定情况下很重要。 (我正在尝试创建一个可以单击的链接,并在其中编辑文本。这里有一个javascript回调函数,这个回调的参数将根据确切保存的内容而有所不同 - 因此需要htmlAttributes对象。)问题是我似乎无法将Html对象传递给帮助器。这是我的助手的代码:

@helper EditLabel(System.Web.WebPages.Html.HtmlHelper html, string id, string text, string defaultText, string linkStyle, object saveFunctionAndArgs)
{    
    string linkText = (string.IsNullOrEmpty(text)) ? defaultText : text;
    <div id="Link_@id">
        <a href="javascript:EditLabel('Link_@id', 'Edit_@id');" style="@linkStyle">@linkText</a>
    </div>    
    <div style="display:none" id="Edit_@id" data-link-id="Link_@id">        
        @html.TextBox("EditLabel", text, saveFunctionAndArgs)        
    </div>
}

这在我的App_Code文件夹中的.cshtml文件中编译并且一切顺利。但是,当我尝试从我的一个视图中调用它时,我的视图提供的Html对象与帮助程序中预期的类型不同。这是电话的样子:

<span>
    @Helpers.EditLabel(Html, id, text, "comment", style, new { saveFunction = "SaveDayuLabel", clinicID = Model["ClinicID"], locationID = Model["LocationID"], date = Model["Date"] })
</span>

在@Helpers.EditLabel之后使用“Html”失败了。(编译器说有“无效的参数”。我已经做了很多关于这个问题的搜索/阅读,但是我越多阅读,我得到的更加困惑。任何建议都非常感激。

1 个答案:

答案 0 :(得分:2)

Razor帮助程序块被编译为页面上的实例方法。 (有关详细信息,请参阅my blog

根本不需要那个参数; helper方法可以访问页面其余部分可以访问的Html property(继承自WebViewPage基类)。


您当前的问题是您将帮助器声明为采用ASP.Net WebPages HtmlHelper类(在System.Web.WebPages.Html命名空间中),而不是MVC版本(在System.Web.Mvc中)。< / p>