Create/Get 来自 MVC 控制器的 DefaultHtmlGenerator

Create/Get DefaultHtmlGenerator from MVC Controller

我正在尝试在我的 MVC6 控制器方法

中为 Microsoft.AspNet.Mvc.Rendering.DefaultHtmlGenerator 创建(或以某种方式获取它的实例)

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

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

这里是 link 关于 HtmlGenerator class DefaultHtmlGenerator

由于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 作为参数。但这确实回答了您提出的问题。