3

我正在尝试将 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”。编译器说有“无效参数”。我已经做了很多关于这个问题可能是什么的搜索/阅读,但是我读的越多,我更加困惑。任何建议都非常感谢。

4

1 回答 1

2

Razor 辅助块被编译为页面上的实例方法。(更详细的可以看我的博客

你根本不需要那个参数;辅助方法可以访问与页面其余部分相同的Html属性(从WebViewPage基类继承)。


您的直接问题是您将帮助程序声明为采用 ASP.Net WebPagesHtmlHelper类(在System.Web.WebPages.Html命名空间中),而不是 MVC 版本(在 中System.Web.Mvc)。

于 2013-06-28T03:28:10.090 回答