在控制器中使用HtmlHelper
是否有可能在控制器中使用HtmlHelper,例如获取TextBox(…)方法? 不是我不能写自己生成的html,但我只是想了解这是如何工作的,所以我可以创build最好的解决scheme。
提前致谢!
这里有一个例子适应这个 :
var h = new HtmlHelper(new ViewContext(ControllerContext, new WebFormView("omg"), new ViewDataDictionary(), new TempDataDictionary()), new ViewPage()); h.TextBox("myname");
请注意,这是一个黑客,它可以做,但我不认为有这样做的任何好理由…
你可以使用这样的方法:
public static HtmlHelper GetHtmlHelper(this Controller controller) { var viewContext = new ViewContext(controller.ControllerContext, new FakeView(), controller.ViewData, controller.TempData, TextWriter.Null); return new HtmlHelper(viewContext, new ViewPage()); } public class FakeView : IView { public void Render(ViewContext viewContext, TextWriter writer) { throw new InvalidOperationException(); } }
HtmlHelper是Viewdevise的一部分,应该被视为与MVC的Controller和Model部分分开。 我不知道为什么你想要在控制器内部生成控件,因为它的作用是将数据传递到视图进行渲染。
我不是说你不能达到目标,而是为了好的devise,这样会更好。
你能解释一下你正在努力实现什么,然后我们可以用“MVC方式”来实现吗?
using System.Web.Mvc; using System.Web.Mvc.Html; var h = new HtmlHelper<Effort>(new ViewContext(ControllerContext, new WebFormView(ControllerContext, "omg"), new ViewDataDictionary(), new TempDataDictionary(), new StringWriter()), new ViewPage()); h.DisplayFor(e => Model.Efforts[i].Content.Offer.Price1.Value)
如果有人试图从没有控制器(如unit testing)这样做,还有更多的问题需要处理,因为许多这些方法(我知道,这不是一个testing场景,但在这种情况下)投掷空exception( ViewContext.ScopeCache
)。 你可以通过下面的方式看到这个(注意所有这些方法都需要一个ViewContext
实例的形成,这是你插入到HtmlHelper实例的构造函数中的一个参数,所以在那个对象上):
viewContext.UnobtrusiveJavaScriptEnabled = false;
简单的设置这个值就会抛出一个exception,但是这个问题已经被我解决了 ,看看他是如何得到一个HtmlHelper
(参见这里 )。
- 使用System.Web.Mvc;
-
使用System.Web.Mvc.Html;
HtmlHelper helper = new HtmlHelper(new ViewContext(ControllerContext, new WebFormView(ControllerContext, "Index"), new ViewDataDictionary(), new TempDataDictionary(), new System.IO.StringWriter()), new ViewPage());
- ASP.NET MVC JsonResultdate格式
- 如何获得一个枚举的值到一个SelectList
- “ASP.global_asax不存在于命名空间ASP”
- 如何在维护从ViewData获取值的同时指定Html.TextBox助手的属性?
- GET和POST方法在同一个Controller中具有相同的Action名称
- 如何在asp.net中使用identity impersonate =“true”时获取Windows用户名?
- 把HTML放入Html.ActionLink(),加上没有链接文本?
- 如何在.NET MVC 2中实现正确的HTTPerror handling?
- 什么是routes.IgnoreRoute(“{资源} .axd / {* pathInfo}”)