我正在尝试将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”失败了。(编译器说有“无效的参数”。我已经做了很多关于这个问题的搜索/阅读,但是我越多阅读,我得到的更加困惑。任何建议都非常感激。
答案 0 :(得分:2)
Razor帮助程序块被编译为页面上的实例方法。 (有关详细信息,请参阅my blog)
根本不需要那个参数; helper方法可以访问页面其余部分可以访问的Html
property(继承自WebViewPage
基类)。
您当前的问题是您将帮助器声明为采用ASP.Net WebPages HtmlHelper
类(在System.Web.WebPages.Html
命名空间中),而不是MVC版本(在System.Web.Mvc
中)。< / p>