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

时间:2014-03-18 23:52:02

标签: 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 [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(所以我知道我使用的是哪个文本模板),然后是文本输入中的值。我不知道如何生成所有这些输入并将其分配给我提前知道以便在控制器中处理的内容。
  3. 我需要避免硬编码值,因为一个要求是我可以在数据库中添加新模板,我不需要在页面上添加一个位置来考虑新添加的模板,它应该自动使其基于db的东西。
  4. 我是否正朝着正确的道路前进?

    如果是这样的话,任何人都可以给我一个正确的方向,我可以动态地创建这些表单字段,但是我可以在控制器上可靠地做一些魔术,然后说'#34;哦,好吧,它是这个模板,我应该期待x个输入,它们是a,b和c&#34;?

    编辑,忘记发布视图模型

    视图模型:

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

1 个答案:

答案 0 :(得分:0)

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

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

然后在您的网页上创建一个List<Answer>来自您的网页。您必须手动在网页的提交方法中构建列表。