C#MVC - 通用向导表单

时间:2017-04-08 09:01:07

标签: c# asp.net-mvc

我正在尝试制作表单向导,我可以在其中定义步骤。对于每个步骤,我需要根据步骤类型进行控制和查看。我尝试在泛型类型上执行此操作,但我在控制器上运行方法时遇到问题。

这是一个例子。

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中的方法等时。

0 个答案:

没有答案