【问题标题】:Custom Html Field Extensions MVC3自定义 Html 字段扩展 MVC3
【发布时间】:2011-11-28 22:47:52
【问题描述】:

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

这就是我要找的:

例如。 @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());
    }
  }
}

无论如何,当我尝试在表单上使用它时,它不会出现在智能感知中:

例如:&lt;li&gt;@Html.PartyDetailsField(Model.IdentifierConfiguration)&lt;/li&gt;

但是,当将相同的代码放在 HtmlHelperExtensions 文件中时,它可以正常工作。我什至看不出类定义有什么不同。

在这种情况下有什么可以照亮的,或者我是否必须将它留在 HtmlHelperExtensions 类中。

【问题讨论】:

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


    【解决方案1】:

    确保您已将定义此扩展方法的命名空间纳入您的视图范围:

    @using Matrix.Investigator.Website.Fields
    

    或在您的~/Views/web.config(不是~/web.config)的&lt;namespaces&gt; 标记中将其纳入您所有 Razor 视图的全局范围内。

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

    【讨论】:

    • 添加@using 语句有效。但是,将其添加到 web.config 似乎并没有做任何事情。那肯定是一个更好的解决方案(这样我就可以在其他地方重用控件,而不必担心忘记@using)
    • 关闭视图并再次打开后效果很好。
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2014-09-06
    • 1970-01-01
    • 2014-10-18
    • 2019-10-24
    相关资源
    最近更新 更多