MVC AjaxHelper扩展 - 系统找不到它?

时间:2011-09-09 20:46:15

标签: c# asp.net-mvc-3 extension-methods

我正在尝试构建一个AjaxHelper扩展,似乎正在运行SNAFU。

查看:

<%= Ajax.DeleteLink("Delete", "LicenseDelete", "Directory", new { LicenseID = license.ID }, new { @class = "directory button" }); %>

扩展:

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Linq.Expressions;
using System.Web.Routing;
using System.Web.Mvc.Ajax;

namespace RainWorx.FrameWorx.MVC
{
    public static class HtmlExtensions
    {
        public static MvcHtmlString DeleteLink<TModel>(this AjaxHelper<TModel> ajaxHelper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
        {
            return ajaxHelper.ActionLink(linkText
                                       , actionName
                                       , controllerName
                                       , routeValues
                                       , new AjaxOptions { Confirm = "Are you sure you want to delete this item?",
                                                           HttpMethod = "DELETE",
                                                           OnSuccess = "function() { window.location.reload(); }" }
                                       , htmlAttributes);
        }
    }
}

浏览器结果:

  

&#39; /&#39;中的服务器错误应用。
  编译错误
  描述:编译资源期间发生错误   需要为此请求提供服务。请查看以下具体内容   错误详细信息并适当修改源代码。

     

编译器错误消息:CS1061:   &#39;&System.Web.Mvc.AjaxHelper LT; RainWorx.FrameWorx.MVC.ViewModels.DirectoryEdit&GT;&#39;   不包含&#39; DeleteLink&#39;的定义没有扩展方法   &#39; DeleteLink&#39;接受第一个类型的参数   &#39;&System.Web.Mvc.AjaxHelper LT; RainWorx.FrameWorx.MVC.ViewModels.DirectoryEdit&GT;&#39;   可以找到(你错过了使用指令或程序集   引用?)

我错过了什么(明显的)事情?我可以在扩展方法中发誓第一个参数 接受我选择抛出的任何模型。

TIA

-kb

2 个答案:

答案 0 :(得分:3)

您可能需要在web.config或视图本身中注册命名空间。

使用WebForms查看示例:

<%@ Import Namespace="RainWorx.FrameWorx.MVC" %>

http://msdn.microsoft.com/en-us/library/eb44kack.aspx

使用带有C#的Razor View Engine查看示例:

@using RainWorx.FrameWorx.MVC

使用Razor View Engine w / VB.NET查看示例:

@Imports RainWorx.FrameWorx.MVC

How do I import a namespace in Razor View Page?

Web.Config示例:

<system.web>
    <compilation>
        <add assembly="RainWorx.FrameWorx.MVC" />
    </compilation>
</system.web>

http://msdn.microsoft.com/en-us/library/bfyb45k1.aspx

答案 1 :(得分:2)

在视图中包含您的扩展名称空间。这几乎总是原因。