从MVC Controller创建/获取DefaultHtmlGenerator

时间:2016-01-05 20:06:06

标签: asp.net asp.net-mvc asp.net-core-mvc

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

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

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

这是关于HtmlGenerator类的链接 DefaultHtmlGenerator

1 个答案:

答案 0 :(得分:2)

由于MVC 6基于依赖注入,您只需要在构造函数中使用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作为参数。但这确实回答了你提出的问题。