2013-09-21 47 views
5

我一直在浏览网页,试图找到一个很好的示例/教程,详细说明如何创建和使用我自己的自定义HTML助手为我的MVC 3 Razor应用程序,我发现这是一个如下向MVC项目添加自定义HTML助手

Adding your own HtmlHelper in ASP.NET MVC 3

我创建了一个类(修剪下来一点)为使

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace MyWebApp 
{ 
    public static class ExtensionMethods 
    { 
     public static MvcHtmlString StateDropDownListFor<TModel, TValue> 
         (this HtmlHelper<TModel> html, 
             Expression<Func<TModel, TValue>> expression) 
     { 
      Dictionary<string, string> stateList = new Dictionary<string, string>() 
      { 
       {"AL"," Alabama"}, 
       {"AK"," Alaska"}, 
       {"AZ"," Arizona"}, 
       {"AR"," Arkansas"} 

       }; 
       return html.DropDownListFor(expression, 
         new SelectList(stateList, "key", "value")); 
     } 

    } 
} 

到目前为止好,

在我的控制器我还添加了参考现在

using System.Web.Mvc.Html; 

我的观点里,我有以下

@Html.StateDropDownList(x => x.State) 

但我得到以下错误

System.web.mvc.htmlhelper<system.collections.generic.list<Profile.ProfileImages>> does  not contain a definition for StateDropDownList and no extension method  StateDropDownList acception a first argument of type  system.web.mvc.htmlhelper<System.Collections.Generic.List<Profile.ProfileImages>> could be  found(Are you missing a using directive of an assembly reference?) 

可能有人请告诉我是什么即时在这里做错了。

+0

您是否有一个名为DisplayImageFor的HTML帮助器? –

+0

@UfukHacıoğulları对不起,我添加了不正确的错误陈述,我更新了上述内容。 –

回答

15

你应该在你的视图中的命名空间:

@using MyWebApp 

或者你可以导入这个命名空间为所有从web.config文件的意见。

<system.web.webPages.razor> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="MyWebApp" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 
+0

谢谢你的帮助。 –

3

我认为一个更容易的办法是做到以下几点:1。 创建一个视图像往常一样,把你的助手在像往常一样的代码和HTML的搭配,只要你喜欢。 2.将视图移至App_Code文件夹。 3.获取你所有的意见有助于为左右(注意_MyHelpers是在App_Code文件夹的视图的名称):

@_MyHelpers.JQMRadioTrueFalse("Voice Mail on your Home Phone?", "HomePhoneHasAnswerPhone", Model.TrueFalse, t.HomePhoneHasAnswerPhone) 

这将是这是App_Code文件夹视图的例子如上所示访问任何视图:

@helper JQMRadioList(string Legend, string RadioListName, List<Fizz.DomainClasses.GenericClasses.GenericDropDownOption> options, bool Horizontal = false, string CurrentSelection = "") 
    { 
     <fieldset data-role="controlgroup" data-mini="true" data-theme="b" @((Horizontal) ? " data-type=\"horizontal\"" : "")> 
      <legend>@Legend:</legend> 
      @foreach (var li in options) 
      { 
       @JQMRadioListItem(RadioListName, li.TheValue, li.Text, CurrentSelection) 
      } 
     </fieldset> 
    } 
+0

不知道谁投下了这个,但我可以问问是什么原因? – Michael

+0

此答案显示如何在视图中创建助手。它是基于代码的视图的替代方法,没有理由为downvote。 –

相关问题