2011-11-28 76 views
0

我在MVC3(C#)中创建一个自定义字段,我想用视图中的Html属性访问它。我想把它放在自己的类中,这样我就可以很好地组织代码(私有方法等),因为我们当前的Html扩展类太吵了。自定义Html字段扩展MVC3

这就是我要找的:

ex。 @Html.CustomField...

目前,我有这样的代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Matrix.Investigator.Models.Parties; 
using Matrix.Investigator.Website.Extensions; 

namespace Matrix.Investigator.Website.Fields 
{ 
    public static class DetailsField 
    { 
    public static MvcHtmlString PartyDetailsField(this HtmlHelper helper, IEnumerable<IDetailsConfiguration> configuation) 
    { 
     . 
     . 
     . 

     [Some Code for the field] 

     return MvcHtmlString.Create([CODE FOR TAG].toString()); 
    } 
    } 
} 

无论如何,当我尝试使用此表单上不拿出在智能感知:

例如:<li>@Html.PartyDetailsField(Model.IdentifierConfiguration)</li>

但是,当相同的代码放在HtmlHelperExtensions文件中时,它工作得很好。我甚至没有看到类定义的差异。

是否有任何光线可以照在这种情况下,或者我将不得不将它留在HtmlHelperExtensions类中。

回答

2

确保您带来在此扩展方法是在您的视图定义为范围的命名空间:

@using Matrix.Investigator.Website.Fields 

或在其<namespaces>标签您~/Views/web.config(未~/web.config)中,使其范围全球所有的剃刀视图。

很明显,由于Visual Studio在Razor页面中的Intellisense的风俗习惯,您可能需要关闭并重新打开视图才能选择它。无论如何,永远不要相信视图中的Visual Studio的Intellisense。相信你的直觉和知识。运行应用程序是验证结果的最佳方法。

+0

添加@using语句工作。但是,将其添加到web.config似乎没有任何作用。这肯定会是一个更好的解决方案(以便我可以在其他地方重复使用该控件,而不必担心忘记@using) –

+0

关闭视图并再次打开后,效果很好。 –