2

问题 1:

我已经开始学习 ASP.NET MVC。我做了一个简单的扩展方法,像这样:

namespace MvcTestz  //Project is also named as "MvcTestz"
{
  public static class SubmitButtonHelper //extension method.
  {
    public static string SubmitButton(this HtmlHelper helper,string buttonText)
    {
        return string.Format("<input type=\"submit\" value=\"{0}\">",buttonText);
    }
  }
}

然后我将自定义 HtmlHelper 的名称空间添加到 中Web.Config,就像这样

  <namespaces>
    <!--other namespaces-->
    <add namespace="MvcTestz"/>
    <!--other namespaces-->
  </namespaces>

这样我就可以在 razor 视图中使用智能感知,但它自定义的 Helper 没有出现在一个视图(Home/View/About.cshtml)中。

在此处输入图像描述

所以在另一个视图中,(Home/View/Index.cshtml)我按@using MvcTestz;语句添加了命名空间。

问题 2:

在 WebApp 执行时主页(Home/View/Index.cshtml)显示输入按钮文本而不将其呈现为 HTML。

在此处输入图像描述 在关于页面(Home/View/About.cshtml)服务器上生成错误。(点击放大) 在此处输入图像描述

更新:

  1. Intellisense 问题解决了,我不得不编辑 View Directory 中的 Web.Config。解决了。
  2. HtmlString如果我想渲染一个 Html 按钮,应该使用它。解决了。
4

2 回答 2

9

问题1:

Razor 命名空间应<system.web.webPages.razor>在 web.config 的节点中注册:

 <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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.Routing" />
        <add namespace="MvcTestz"/>

      </namespaces>
    </pages>
  </system.web.webPages.razor>

问题 2:在您的帮助程序中使用HtmlString而不是字符串:

public static HtmlString SubmitButton(this HtmlHelper helper, string buttonText)
{
    return new HtmlString(string.Format("<input type=\"submit\" value=\"{0}\">", buttonText));
}
于 2012-08-10T07:17:59.787 回答
1

尝试这样的事情,

对于您的扩展方法,请使用MvcHtmlString.Create

public static MvcHtmlString MySubmitButton(this HtmlHelper helper, string buttonText)
{
  return MvcHtmlString.Create("<input type='submit' value='" + buttonText + "' />");
}

并包括您的参考见下文

  <system.web.webPages.razor>
    <namespaces>
        <!- add here.....  -->
        <add namespace="MvcTestz"/>

      </namespaces>        
  </system.web.webPages.razor>
于 2012-08-10T07:30:57.150 回答