【问题标题】:Html.BeginForm() with Razor Generator带有 Razor 生成器的 Html.BeginForm()
【发布时间】:2012-03-26 22:13:16
【问题描述】:

我正在制作一个带有剃须刀生成器的助手来构建一个自定义控件,其中将有两个单选按钮(是/否) 我想为此使用 Html.BeginForm。

但是做不到。

你知道怎么做或其他方法吗?

谢谢。

编辑:

当我输入这段代码时

@using (Html.BeginForm()) {
    <input type="radio"/>
    <input type="radio"/>
}

我收到这个错误

'System.Web.WebPages.HtmlHelper' does not contain a definition for BeginForm and no extension method
'BeginForm' accepting a first argument of type 'System.Web.WebPages.Html.HtmlHelper'could be found 

【问题讨论】:

  • 你“做不到”是什么意思?有错误信息吗?
  • 'System.Web.WebPages.HtmlHelper' 不包含 BeginForm 的定义,并且没有扩展方法 'BeginForm' 接受类型为 'System.Web.WebPages.Html.HtmlHelper' 的第一个参数找到

标签: asp.net-mvc-3 razor custom-controls helper


【解决方案1】:

我遇到了同样的问题,刚刚解决了。我在 views 文件夹下的 web.config 文件中更改了版本。 这是我之前的代码

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, **Version=5.0.2.2**, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<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="CMSSol" />
  </namespaces>
</pages>

这是我的新代码

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, **Version=5.0.0.0**, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<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="CMSSol" />
  </namespaces>
</pages>

【讨论】:

    【解决方案2】:

    对我来说,这是一个缺失的命名空间,是的,但不是eouw0o83hf 提到的命名空间:

    @using System.Web.Mvc.Html;
    

    【讨论】:

      【解决方案3】:

      当您的辅助函数位于 App_Code 文件夹中时,将此代码添加到您的辅助函数中。

      var Html = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
      var Ajax = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Ajax;
      

      不要忘记在文件中包含正确的命名空间:@using ....

      【讨论】:

      • 在每个辅助方法中都包含这些引用很烦人,并且让 Resharper 抱怨变量混淆等
      【解决方案4】:

      这很可能是命名空间或引用问题。

      首先,检查以确保 System.Web.WebPages 出现在您的项目引用中。然后添加

      @using System.Web.WebPages
      

      到您的视图顶部。如果解决了这个问题,您可以根据this answer on the same type of topic 将引用移动到 web.config 中

      【讨论】:

        【解决方案5】:

        请在您提出问题时发布您的代码,以便我们了解您做错了什么。试试这个:

         @using (Html.BeginForm()) {
                <input type="radio"/>
                <input type="radio"/>
        }
        

        【讨论】:

          猜你喜欢
          • 2013-07-12
          • 1970-01-01
          • 2012-05-23
          • 1970-01-01
          • 2019-04-28
          • 1970-01-01
          • 1970-01-01
          • 2010-12-30
          • 1970-01-01
          相关资源
          最近更新 更多