mvc html的扩展,asp.net mvc - 使用Razor声明性视图中的MVC HtmlHelper扩展
asp.net mvc - 使用Razor声明性视图中的MVC HtmlHelper扩展
我试图在我的App_Code文件夹中为MVC 3 RTM项目创建一个Razor声明性帮助器。
我遇到的问题是MVC HtmlHelper扩展(如ActionLink)不可用。 这是因为编译好的助手派生自System.Web.WebPages.HelperPage,虽然它暴露了Html属性,但其类型为System.Web.WebPages.HtmlHelper而不是System.Web.Mvc.HtmlHelper。
我得到的一种错误的例子是:
'System.Web.Mvc.HtmlHelper'没有 包含'ActionLink'的定义 没有扩展方法'ActionLink' 接受第一个类型的参数 'System.Web.Mvc.HtmlHelper'可以 发现(你错过了使用 指令或程序集引用?)
我唯一的解决方案是创建自己的HelperPage并覆盖Html属性:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
然后我必须在每个助手的顶部写下面的内容:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
它是否意味着在MVC 3中这么难,或者我做错了什么?
9个解决方案
42 votes
看一看Marcind对这个问题的回答。 您遇到的是将声明性视图放在App_Code文件夹中的限制。
将助手放在App_Code中可以正常工作 但有一定的局限性 影响某些MVC场景(for 示例:无法访问标准MVC HTML。佣工)
Omar answered 2019-06-08T01:22:47Z
38 votes
我为WebPages助手创建了一个扩展方法,以便我可以访问页面助手。
public static HtmlHelper GetPageHelper(this System.Web.WebPages.Html.HtmlHelper html)
{
return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html;
}
Jake Hoffner answered 2019-06-08T01:23:12Z
11 votes
奥马尔在这里得到了正确的答案,但我想补充一些东西(请随意将奥马尔的回答标记为答案)。
我们在v1中意识到了这一点并且无法在产品中得到很好的解决方案,但David Ebbo(ASP.Net团队的架构师)发布了一个Visual Studio代码生成器示例,它基本上是第一次探索 我们正在寻求使这项工作正常运行的想法:[http://blogs.msdn.com/b/davidebb/archive/2010/10/27/turn-your-razor-helpers-into-reusable-libraries.aspx]
尝试一下,看看你的想法! 让大卫知道你是否通过在他的博客上发表评论。
Andrew Stanton-Nurse answered 2019-06-08T01:23:53Z
9 votes
与@Jakes答案类似:
public static class MvcIntrinsics {
public static System.Web.Mvc.HtmlHelper Html {
get { return ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html; }
}
public static System.Web.Mvc.AjaxHelper Ajax {
get { return ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Ajax; }
}
public static System.Web.Mvc.UrlHelper Url {
get { return ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Url; }
}
}
用法:
@MvcIntrinsics.Html.Raw("test")
来源:Dino Esposito - 编程Microsoft ASP.NET MVC
Greg Gum answered 2019-06-08T01:24:27Z
7 votes
替代解决方案:
在你的razor-helper文件上添加它:
@functions {
public static System.Web.Mvc.HtmlHelper HHtml = ((System.Web.Mvc.WebViewPage)WebPageContext.Current.Page).Html;
}
然后像这样称呼它:
@HHtml.ActionLink("actionname")
Alex answered 2019-06-08T01:25:01Z
4 votes
为了搜索者的利益,我在创建MVC视图作为类库的一部分(用于组件重用)时遇到了同样的错误。 上面部分提到的解决方案是在.cshtml文件的顶部添加以下using语句:
@using System.Web.Mvc
@using System.Web.Mvc.Html
无需进一步的工作。
HockeyJ answered 2019-06-08T01:25:35Z
3 votes
我的方法是简单地将页面作为参数传递给辅助方法。 所以在你的例子中它将是:
@helper DoSomething(WebViewPage page)
{
@page.Html.ActionLink("Index", "Home")
}
然后在您需要的Razor视图中调用它,如下所示:
@YourHelperFilename.DoSomething(this)
立即执行此操作可以访问您通常拥有的页面属性,如ViewData或Url(以及HtmlHelper扩展名)。
作为额外的好处(如果您需要),您还可以访问实例属性,例如页面ViewData。
Dejan answered 2019-06-08T01:26:22Z
0 votes
我知道MVC 3存在一些智能感知问题。我认为如果你在web.config中设置了命名空间,帮助程序仍然可以工作。
MVC 3 RTM刚刚发布,你使用这个还是测试版?
Lee Smith answered 2019-06-08T01:26:55Z
0 votes
看起来ASP.NET MVC已经在VS 2013中解决了这个问题。请参阅这篇文章[http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3670180-support-helper-extensionmethod-this-htmlhelper-HT]
Omar answered 2019-06-08T01:27:22Z
mvc html的扩展,asp.net mvc - 使用Razor声明性视图中的MVC HtmlHelper扩展相关推荐
- php 身份认证 claim,asp.net core cookie身份认证view视图中读取/读取User.Claims中的值实例...
假设claim如下,q为查询出来的用户表结果集 var claims = new List(){ new Claim("UserId", q.Id.ToString()), new ...
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
在众多表单元素中,有一类<select>元素用于绑定一组预定义列表.传统的ASP.NET Web Form中,它对应着一组重要的控件类型,即ListControl,我们经常用到DropDo ...
- 关于ASP.NET MVC P5中CheckBox的HtmlHelper方法的bug。
在ASP.NET MVC P5中,当你使用这样的方法输出CheckBox:<%=Html.CheckBox("checkTest")%>,在浏览器上除了你期望看到的代码 ...
- 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】
索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...
- html里面的view怎么修改,asp.net mvc 3-在局部视图中修改MVC 3 ViewBag不会保留到_Layout.cshtml...
asp.net mvc 3-在局部视图中修改MVC 3 ViewBag不会保留到_Layout.cshtml 我在Razor视图引擎中使用了MVC 3. 我想在局部视图的ViewBag中设置一些值,并 ...
- mvc jquery ajax方法,asp.net mvc-如何在jQuery $ .ajax()中将模型发送请求到MVC控制器方法...
asp.net mvc-如何在jQuery $ .ajax()中将模型发送请求到MVC控制器方法 在使用以下代码进行自动刷新时,我假设执行发布后,模型将自动发送给控制器: $.ajax({ url: ...
- 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...
- 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC
七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)-- ...
- asp.net core mvc权限控制:在视图中控制操作权限
在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...
- 在 ASP.NET Core 中安装 MVC
目录 本文出自<从零开始学 ASP.NET CORE MVC>目录 视频课程效果更佳:从零开始学 Asp.Net Core MVC 在ASP.NET Core 中安装 MVC 在本视频中 ...
最新文章
- MSCKF-Based Visual-Wheel Odometry 轮速视觉融合里程计
- 目标层准则层MATLAB,层次分析法-MATLAB
- Python中的高效的集合操作
- 2020 年终总结:变化 积累
- 使用git建立本地仓储管理代码【转】
- 【信息系统项目管理师】第12章-项目采购管理 知识点详细整理
- 【Endnote】EndnoteX9快速上手教程
- 清华ACL'22 | 一文读懂刘知远所在实验室18篇论文详情
- D - 迷宫游戏 (最短路径)
- 汽车电子技术——CAN总线系统
- floyd与传递闭包
- 基于fabricjs实现钢笔工具
- 关于徐晓东,传统武术,以及太极拳
- APICloud可视化开发新手图文教程
- 用计算机对视频进行剪裁和编辑,爱剪辑怎么裁剪视频片段?
- 一种LCD屏闪问题的调试
- 记深信服2018秋季校园招聘--技术服务工程师
- 计算机私密相册安全吗,一张照片竟能泄露这么多隐私?这个功能不可不知
- 下载上市公司财报并可视化某科目
- 计算机显示器是输入,如果计算机显示器未显示视频输入怎么办
热门文章
- redis安装部署(1)
- Python::OS 模块简介
- C51寄存器详解(Reg51.h)
- 一个简单的优酷视频链接探测与分享功能
- ASP.NET 2.0中的页面输出缓存
- html中div弹出显示
- linux安装snmp显示乱码_Linux安装X Window服务——远程显示GUI
- 腾讯云服务器连接失败,启动报错:A start job is running for /etc/rc.d/rc.local Compatibility
- Yii Framework2.0开发教程(1)配置环境及第一个应用HelloWorld
- vue cli3.0 解决跨域问题和axios等问题,配合Django