gpt4 book ai didi

html - 在创建我自己的 HTML Helper 时遇到问题

转载 作者:行者123 更新时间:2023-11-28 00:02:42 26 4
gpt4 key购买 nike

我正在尝试创建自己的 Html。 Razor 的助手灵感来自 this回答。我对参数“this HtmlHelper html”有疑问

    public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt)
{
var url = new UrlHelper(html.ViewContext.RequestContext);

// build the <img> tag
var imgBuilder = new TagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));
imgBuilder.MergeAttribute("alt", alt);
string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);

// build the <a> tag
var anchorBuilder = new TagBuilder("a");
anchorBuilder.MergeAttribute("href", url.Action(action, routeValues));
anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);

return MvcHtmlString.Create(anchorHtml);
}

我看到在所有的 Html 帮助程序中,方法也使用了这个参数。然而。我不断收到错误消息,我创建的方法没有重载。

我相当确定 Lucas 提供的方法有误。我创建了一个新的静态类并将命名空间添加到 Web 配置(由 umar 提供的答案)。

有人能帮我看看我为什么会收到这个吗?

提前致谢

------ 编辑这是我的完整类(class)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace SSA_Project.Models.htmlHelper {
public static class htmlHelperExtension {
public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt) {
var url = new UrlHelper(html.ViewContext.RequestContext);

// build the <img> tag
var imgBuilder = new TagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));
imgBuilder.MergeAttribute("alt", alt);
string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);

// build the <a> tag
var anchorBuilder = new TagBuilder("a");
anchorBuilder.MergeAttribute("href", url.Action(action, routeValues));
anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);

return MvcHtmlString.Create(anchorHtml);
}
}
}

网络配置:

<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<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="System.Web.WebPages" />
<add namespace="SSA_Project.Models.htmlHelper" />
</namespaces>
</pages>

我正在尝试调用它@Html.ActionImage(..)

我刚刚发现还有一个 webconfig 文件 @ map “ View ”,所以我删除了之前提到的 namespace 并将其添加到那里。下面的代码

 <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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="SSA_Project.Models.htmlHelper" />
</namespaces>
</pages>
</system.web.webPages.razor>

这是我工作的区域。(选择一个是我工作的区域) Area

您可以在上面的屏幕截图中看到整个 webconfig 文件。

<?xml version="1.0"?>

<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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="SSA_Project.Models.htmlHelper" />
</namespaces>
</pages>
</system.web.webPages.razor>

<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>

<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>

最佳答案

您提到的已添加到 web.config 的更改需要添加到 Views 文件夹中的 web.config。请确保它们位于此处,而不仅仅是位于项目根目录中的 web.config 中。

您还可以在单​​个 View 中添加@using 语句以使用它,例如

@using SSA_Project.Models.htmlHelper

@Html.ActionImage(....)

如果您使用的是区域,则 web.config 必须位于 Areas/AreaName/Views 中。您还可以将 web.config 文件添加到 Views 文件夹中的各个文件夹 - 将使用最接近的现有配置文件。例如……

|-Areas
| \-Admin
| \-Views
| |-Home
| | \-Index.cshtml
| \-Web.config <-- Will be used by Areas\Admin\Views\Home\Index.cshtml
|-Views
| |-Account
| | |-Login.cshtml
| | \-Web.Config <-- Will be used by Views\Account\Login.cshtml
| |-Home
| | \-Index.cshtml
| \-Web.config <-- Will be used by Views\Home\Index.cshtml
\-Web.Config

我已经使用您问题中的代码创建了一个项目,这对我来说效果很好。我做了以下事情:

  • 创建新的 MVC 项目
  • 将文件夹“htmlHelper”添加到 Models 文件夹
  • 使用您的问题内容创建“htmlHelperExtension.cs”
  • 添加<add namespace="WebApplication5.Models.htmlHelper"/>到 Views/Web.config 的命名空间部分
  • 添加@Html.ActionImage("Index", "Home", "~/Content/images/blah.png", "aaaa")到 Views\Shared_Layout.cshtml

这对我有用!

关于html - 在创建我自己的 HTML Helper 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com