我如何动态地创建输入字段以发送回我的控制器

本文关键字:字段 控制器 我的 输入 创建 何动态 动态 | 更新日期: 2023-09-27 17:50:48

不确定这个问题是否有意义。这是我想做的理想的。我有一个像这样的文本模板的数据库表:

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>

这就是我被挂断的地方:

  1. 模板文本可以有1-无限个输入字段。
  2. 我想发布模板Id(所以我知道我使用哪个文本模板),然后从文本输入的值。我不知道如何生成所有这些输入并为它们分配id,以便在控制器中处理。
  3. 我需要避免硬编码值,因为一个要求是我可以在数据库中添加新的模板,我不需要在页面上添加一个地方来解释新添加的一个,它应该自动使它基于db的东西。

我走的路对吗?

如果是这样,谁能给我一个轻推在正确的方向如何我可以动态地创建这些表单字段,但在某种程度上,我可以可靠地做一些魔术在控制器上说,"哦,好吧,这是这个模板,我应该期望x的输入,这是a,b和c"?

编辑,忘记发布viewmodel

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; }
}

我如何动态地创建输入字段以发送回我的控制器

根据您的需要创建一个特定的Answer类。

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

然后在你的模型上创建一个从你的网页进来的List<Answer>。你必须在你的网页的提交方法中建立这个列表,可能是手动的。