我正在尝试制作表单向导,我可以在其中定义步骤。对于每个步骤,我需要根据步骤类型进行控制和查看。我尝试在泛型类型上执行此操作,但我在控制器上运行方法时遇到问题。
这是一个例子。
public interface IExampleInterface { }
public abstract class WizardBaseController<T> : Controller where T : IExampleInterface
{
public abstract List<T> Steps { get; set; }
public abstract ActionResult RenderStep(T step);
public virtual ActionResult RenderNext(T step)
{
var index = Steps.IndexOf(step);
return RenderStep(Steps[index+1]);
}
}
public class ExampleClass : IExampleInterface { }
public class WizardController<T> : WizardBaseController<ExampleClass> where T : ExampleClass
{
public override List<ExampleClass> Steps { get; set; }
public override ActionResult RenderStep(ExampleClass step)
{
//do stuff
throw new NotImplementedException();
}
public virtual ActionResult RenderStep(T step)
{
throw new NotImplementedException();
}
public ActionResult CreateSteps()
{
Steps = new List<ExampleClass>
{
new AnotherExampleClassA(),
new AnotherExampleClassB(),
new ExampleClass(),
new AnotherExampleClassB(),
new AnotherExampleClassA(),
};
return RenderNext(Steps.First());
}
}
public class AnotherExampleClassA : ExampleClass { }
public class ChildWizzardConotroller : WizardController<AnotherExampleClassA>
{
public override ActionResult RenderStep(AnotherExampleClassA e)
{
//do stuff
throw new NotImplementedException();
}
}
public class AnotherExampleClassB : ExampleClass { }
public class AnotherChildWizzardConotroller : WizardController<AnotherExampleClassB>
{
public override ActionResult RenderStep(AnotherExampleClassB e)
{
//do stuff
throw new NotImplementedException();
}
}
但是当我尝试从wizardController调用操作时,我收到404错误
<a href="@Url.Action("CreateSteps", "Wizard")">Trigger Action</a>
我不确定,如果我的方式是正确的。
基本上我的目标是使用不同类型的步骤创建向导,并根据步骤类型调用不同的方法。例如,对于调用方法RenderStep(带参数类型 - ExampleClass),我想调用WizardController中的方法, 当RenderStep(带参数类型 - AnotherExampleClassA)调用ChildWizzardConotroller中的方法等时。