如何在剃刀视图中构建表单内的对象

时间:2018-05-27 19:18:55

标签: asp.net razor .net-core

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

1 个答案:

答案 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"/>

现在尝试提交,它应该有效。