从 MVC 控制器创建/获取 DefaultHtmlGenerator

问题描述 投票:0回答:1

我正在尝试在我的 MVC6 控制器方法中为 Microsoft.AspNet.Mvc.Rendering.DefaultHtmlGenerator 创建(或以某种方式获取它的实例)

我想在我的 asp.net mvc 控制器中生成用于验证我的模型的 html。我的问题是在哪里获取 DefaultHtmlGenerator 的构造函数数据,例如防伪、metadataProvider 等

 [HttpGet]
 public IActionResult GetMarkup()
 {
    // IHtmlGenerator ge = this.CurrentGenerator(); 
    IHtmlGenerator ge = new DefaultHtmlGenerator(params);
    var tag= ge.GetClientValidationRules(params)
}

这是有关 HtmlGenerator 类的链接 默认Html生成器

asp.net asp.net-mvc asp.net-core-mvc
1个回答
3
投票

由于 MVC 6 基于依赖注入,您所要做的就是在构造函数中 require

IHtmlGenerator
,DI 容器将自动填充
DefaultHtmlGenerator
的所有依赖项(前提是您的 DI 中设置了这些依赖项)配置)。

public class HomeController : Controller
{
    private readonly IHtmlGenerator htmlGenerator;

    public HomeController(IHtmlGenerator htmlGenerator)
    {
        if (htmlGenerator == null)
            throw new ArgumentNullException("htmlGenerator");
        this.htmlGenerator = htmlGenerator;
    }

    public IActionResult GetMarkup()
    {
        // Use the HtmlGenerator as required.
        var tag = this.htmlGenerator.GetClientValidationRules(params);

        return View();
    }
}

也就是说,

GetClientValidationRules
方法似乎仅设计用于在视图中工作,因为它接受
ViewContext
作为参数。但这确实回答了您提出的问题。

© www.soinside.com 2019 - 2024. All rights reserved.