设置:
我设计了一个向导(最初基于 Steve Sanderson 在 Pro ASP.NET MVC 2 中的向导)。
本质上,基本向导控制器声明如下:
public abstract class WizardController<TModel> : Controller where TModel : class, IWizardModel, new()
{
// Loads-n-loadsa-code
}
因此,要实现我的向导,我需要如下声明我的向导控制器:
[WizardOptions(StartLabel="Edit >>")]
public partial class EditFeeEarnerController : WizardController<MyApp.Models.MySpecificWizardModel>
{
// small amounts of highly intuitive code
}
在哪里MyViewModel
实现IWizardModel
。
到现在为止还挺好。该向导工作得很好,我对此很满意,所以不要挂断电话。
问题如下:
问题:
唯一的问题是我的向导为每个步骤使用部分视图,这些视图与视图 ( ) 一起“缝合” Wizard.cshtml
。
Wizard.cshtml
除了顶部的声明外,任何向导总是相同的,在我的示例中:@model
@model MyApp.Models.MySpecificWizardModel
结果,在一个包含 20 个向导的应用程序中,同一个文件出现了 20 次。
绝对不干。
问题:
我想放入一个文件~/Views/Shared/Wizard.cshtml
并将其用于我所有的向导。我不能这样做的原因是因为我只事先知道我的向导视图模型将继承自IWizardModel
.
我不能这样做:
@model IWizardModel
那么最好的方法是什么,或者它是不可能的?
我想我可以有一个基本的向导视图模型,我的所有向导视图模型都继承自(而不是直接实现IWizardModel
)。
这行得通吗?
编辑(事后看来):
作为记录,我的问题是我误以为使用接口作为我的模型,即 ,@model IWizardModel
是行不通的。正如 Iain Galloway 在他的回答中指出的那样,它确实解决了我的问题。
我认为我不能使用接口作为我的模型的原因是我做了以下事情:
@model IWizardModel // MyNamespace.MySpecificWizardModel
问题是右边的注释(我注释掉了旧模型)。
出于某种原因,该评论产生了一个错误(与 相关ViewEngine
)。匆忙中,我只是假设您不能为模型使用接口。
正如老威尔所说:你的力量是伟大的,哦,延迟。
请参阅 Iain Galloway 的答案和我的附录。