如何在剃刀@helper中使用HtmlHelper和AjaxHelper?

时间:2011-07-08 17:48:31

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper

我想创建一个帮手:

@using System.Web.Mvc
@using System.Web.Mvc.Ajax
@using System.Web.Mvc.Html
@using System.Web.Routing
@using Proj.Extenders
@using Proj.Web.Mvc
@using Proj.Web.Mvc.Paging
@using Proj.Mvc.Helpers
@using Proj.Mvc

@helper Create(dynamic ajaxHelper, dynamic htmlHelper,
    string text,
    string targetID,
    string actionName,
    string controllerName,
    object routeValues,
    string active)
{
    <li@{ if (active == targetID) { <text> class="active"</text> } }>
        @ajaxHelper.ActionLink(htmlHelper.Resource(text).ToString(),
            actionName, controllerName, routeValues, updateTargetId: targetID)
    </li>
}

问题是我在HtmlHelper<T>上有扩展方法,其中T是模型的类型。我想对几个视图使用相同的帮助器,但视图上的@model会有所不同。

找不到扩展方法:

'System.Web.Mvc.AjaxHelper<X>' does not contain a definition for 'ActionLink'

ActionLink方法

public static MvcHtmlString ActionLink<T>(this AjaxHelper<T> ajax,
    string linkText = " ",
    string actionName = null, string controllerName = null,
    object routeValues = null, object htmlAttributes = null,
    string confirm = null,
    string httpMethod = null,
    InsertionMode insertionMode = InsertionMode.Replace,
    int loadingElementDuration = 0,
    string loadingElementId = null,
    string onBegin = null,
    string onComplete = null,
    string onFailure = null,
    string onSuccess = null,
    string updateTargetId = null,
    string url = null)
{
    var options = GetAjaxOptions(confirm, httpMethod, insertionMode, loadingElementDuration,
        loadingElementId, onBegin, onComplete, onFailure, onSuccess, updateTargetId, url);

    return ajax.ActionLink(linkText, actionName, controllerName, routeValues, options, htmlAttributes);
}

该文件位于

- Website
  - App_Code
     TabHelper.cshtml

如何在帮助文件上使用HtmlHelper<T>AjaxHelper<T>方法?

1 个答案:

答案 0 :(得分:1)

内联@helper不能是通用的。您必须使用定义为扩展方法的标准帮助程序,或者只使用某些编辑器/显示模板或部分视图。在您的特定情况下,我不明白为什么您的自定义ActionLink必须是通用的。你最后在最后调用ajax.ActionLink,这不是通用的。