当前位置:  开发笔记 > 后端 > 正文

在Controller中使用HtmlHelper

如何解决《在Controller中使用HtmlHelper》经验,为你挑选了4个好方法。

是否可以在控制器中使用HtmlHelper,例如获取TextBox(...)方法?并不是说我不能写自己生成的html,但我只是想了解它是如何工作的,所以我可以创建最好的解决方案.



1> Mauricio Sch..:

下面是改编自一个例子此:

var h = new HtmlHelper(new ViewContext(ControllerContext, new WebFormView("omg"), new ViewDataDictionary(), new TempDataDictionary()), new ViewPage());
h.TextBox("myname");

请注意,这是一个黑客,它可以做,但我认为没有任何理由这样做...


你可以使用'var htmlHelper = new HtmlHelper(new ViewContext(),new ViewPage());' 现在.使用它的一个好理由是产生抗癫痫药.我已经做到这一点,在通过MVC控制器代理的传统asp3.0系统上启用CSRF保护.
我认为这不是一件很棒的事情,但是我使用的是使用AJAX的Telerik网格控件,当使用AJAX时,列的ClientTemplate必须是预渲染文本 - 它无法解析对客户的行动.无论如何,这是我的理由.我更喜欢控制器不能以这种方式工作,但是如果我支付的价格比我能做的任何事情都要好,那么这就是我要解决的问题.

2> Vitaliy Ulan..:

你可以使用这样的方法:

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();
    }
}


在mvc 3控制器中使用htmlhelper的好方法是调用Partial方法来呈现视图的html(例如使用razor视图作为模板html电子邮件)

3> Richard..:

HtmlHelper是View机制的一部分,应该被视为与MVC的Controller和Model部分分开.我不确定你为什么要在控制器内部生成控件,因为它的作用是将数据传递给视图进行渲染.

我不是说你无法实现它,但是为了好的设计它会更好.

你能解释一下你想要实现的目标,然后我们可以用"MVC方式"来做这件事吗?



4> Anubis..:
using System.Web.Mvc;
using System.Web.Mvc.Html;

var h = new HtmlHelper(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)

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有