public class MyModel
{
public int Id { get; set; }
public string Name { get; set; }
public MyType MyType { get; set; }
public IMyConfig MyConfig { get; set; }
}
public enum MyType
{
FirstConfig,
SecondConfig,
ThirdConfig
}
public interface IMyConfig
{
string BuildFirstJson();
string BuildSecondJson();
}
public class FirstConfig : IMyConfig
{
public string cat { get; set; }
public string dog { get; set; }
public string lion { get; set; }
public string BuildFirstJson()
{
...
}
public string BuildSecondJson()
{
...
}
}
public class SecondConfig : IMyConfig
{
public string bear { get; set; }
public int pig { get; set; }
public string fish { get; set; }
public string shark { get; set; }
public string dolphin { get; set; }
public string BuildFirstJson()
{
...
}
public string BuildSecondJson()
{
...
}
}
//ThirdConfig built similarly
所以我要做的是在剃刀视图中构建一个表单,该表单可以处理MyModel
类并根据所选的IMyConfig
切换显示的MyType
绑定,例如,如果从枚举列表中选择FirstConfig
,则会显示FirstProp, SecondProp, ThirdProp
文本框,并且在提交表单时,这些属性会正确构建到FirstConfig
对象中并传递到{{1} }作为MyModel
接口。我不知道如何完成这一部分,我打算使用jquery IMyConfig
来监听.change()
下拉列表中的切换。但我不知道如何处理单独的显示和自动模型构建(如果这是有道理的)。
如果这没有意义,快速版本是我正在尝试为MyType
构建剃刀视图表单,而不是如何处理基于MyModel
的{{1}}属性{1}}属性。
MyConfig
控制器 -
MyType
答案 0 :(得分:0)
我无法确切地知道你的问题是什么,但我想你需要以下内容(如果不是你需要的话,我很乐意编辑答案。)
您可以在Razor页面内的枚举中查看所选值:
<form>
@switch(Model.MyType)
{
case FirstConfig:
<input name="cat"/>
<input name="dog" />
<input name="lion" />
break;
case SecondConfig:
... Do something ...
break;
}
</form>
动作ActivityCreateSubmit
应该有一个类所需的类的参数(FirstConfig)。您为每个输入提供的名称必须与您的班级FirstConfig
中的属性相同,即,如下所示:
<input name="cat"/>
<input name="dog"/>
<input name="lion"/>
现在尝试提交,它应该有效。