C# 如何动态创建输入字段以发回控制器

C# 如何动态创建输入字段以发回控制器,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,不确定这个问题是否有意义。这是我理想中想要做的。我有一个包含如下文本模板的数据库表: Line managed |amount| individuals. Won |currency| |value| of new business in |quarter|. Responsible for P&L worth |currency| |value|. Managed |numberOf| external clients across |territory|. Won [cur

不确定这个问题是否有意义。这是我理想中想要做的。我有一个包含如下文本模板的数据库表:

Line managed |amount| individuals.

Won |currency| |value| of new business in |quarter|.

Responsible for P&L worth |currency| |value|.

Managed |numberOf| external clients across |territory|. 
Won [currency select list] [value text input] of 
new business in [quarter text input]
                                                 [submit button]
这正是它们当前存储在查找表中的方式。如果需要的话,我可以改变这个,但我需要从一些事情开始

我需要创建一个页面,用户可以在其中按名称浏览这些“模板”的列表,他们可以这样填写:

Line managed |amount| individuals.

Won |currency| |value| of new business in |quarter|.

Responsible for P&L worth |currency| |value|.

Managed |numberOf| external clients across |territory|. 
Won [currency select list] [value text input] of 
new business in [quarter text input]
                                                 [submit button]
到目前为止,我将页面设置为循环浏览类别和模板,如下所示:

<div class="row tab-v3">
    <div class="col-sm-3">
        <ul class="nav nav-pills nav-stacked" id="statementCats">
            @foreach(var cat in Model.StatementCategories)
            {
            <li class="active"><a href="#@cat.Id" data-toggle="tab">@cat.Name</a></li>
            }
        </ul>
    </div>
    <div class="col-sm-9">
        <div class="tab-content" id="statementTabs">
            @foreach(var cat in Model.StatementCategories)
            {
            <div class="tab-pane active" id="@cat.Id">
                <ul>
                    @foreach (var tmpl in Model.StatementTemplates.Where(tmpl => tmpl.StatementCategory != null && tmpl.StatementCategory.Id == cat.Id))
                    {
                    <li>@tmpl.Name</li>
                    }
                </ul>
            </div>
            }
        </div>
    </div>
</div>

    @foreach(Model.StatementCategories中的var cat) {
  • }
@foreach(Model.StatementCategories中的var cat) {
    @foreach(Model.StatementTemplates.Where中的var tmpl(tmpl=>tmpl.StatementCategory!=null&&tmpl.StatementCategory.Id==cat.Id)) {
  • @tmpl.Name
  • }
}
这就是我被挂断的地方:

  • 模板文本可以有1个无限多的输入字段
  • 我想发布模板Id(这样我就知道我使用的是哪个文本模板),然后发布文本输入的值。我不知道如何生成所有这些输入,并为它们分配我将提前知道的id,以便在控制器中处理
  • 我需要避免硬编码值,因为一个要求是我可以在数据库中添加新模板,并且我不需要在页面上添加一个位置来解释新添加的模板,它应该根据数据库内容自动生成
  • 我走的路对吗?

    如果是这样的话,有谁能给我一个正确的方向,告诉我如何动态地创建这些表单字段,但我可以可靠地在控制器上做一些魔术,并说“哦,好吧,就是这个模板,我应该期望x个输入,它们是a、b和c”

    编辑,忘记发布viewmodel

    视图模型:

    public class CareerStatementsViewModel
    {
        //user specific statements
        public List<UserStatement> UserStatements { get; set; }
        //Simple name and id table
        public List<StatementCategory> StatementCategories { get; set; }
        //has the statement template, id, and associated category_id
        public List<StatementTemplate> StatementTemplates { get; set; }
    }
    
    公共类CareerStatementsViewModel
    {
    //特定于用户的语句
    公共列表用户语句{get;set;}
    //简单名称和id表
    public List语句categories{get;set;}
    //具有语句模板、id和关联的类别id
    公共列表语句模板{get;set;}
    }
    
    根据您的需要创建一类
    答案

    public class Answer
    {
        public int questionId { get; set; }
        public string answer { get; set; }
        // Anything else you might want or need
    }
    

    然后在从网页输入的模型上创建一个
    列表
    。您必须在网页的提交方法中创建列表,可能是手动的。

    我仍然认为这是必须为每个模板写出文本并手动输入。我可以看到我如何可能地发回一个地方,但这并不能解决任何标记问题。