我想动态创建ascx文件,以部分渲染它们。 但据我所知,ot显示它们,我至少需要虚拟方法:
public ActionResult test()
{
return PartialView();
}
如何为每个新的ascx文件创建此方法?
upd:我需要工厂吗?
答案 0 :(得分:0)
为什么要创建动态ascx文件?
如果要在控制器中创建所有布局,您应该能够直接返回它。
但是,那你为什么要那样做? 这样,单元测试,重构和重用将非常困难。
答案 1 :(得分:0)
您需要提前创建.ascx控件。如果您这样做,我建议您注册一个新的视图引擎,以提供新的PartialView
位置。
public class MyViewEngine : WebFormsViewEngine
{
public MyViewEngine()
{
PartialViewLocationFormats = new[]
{
"~/Views/{1}/{0}.ascx",
"~/Views/GeneratedControls/{0}.ascx",
"~/Views/Shared/{0}.ascx"
};
}
}
这允许您将动态视图写入/Views/GeneratedControls/
文件夹。如果您需要使用专门命名的控件(即您生成的控件具有随机名称),则只需将调用调整为PartialView
:
public ActionResult test()
{
return PartialView("name-of-control");
}
否则MVC将使用Action
的名称作为要使用的控件的名称。