表单中的动态列表

时间:2019-07-11 07:18:35

标签: c# asp.net razor-pages

我的网站上有一个表格。 将此表单以剃刀形式推送到C#对象。

问题是我有多个同类物品,所以我有多个Decision.Title和多个Decision.description。

“决策”是一个列表对象,但是问题是我不知道如何动态地使它。 这意味着我必须为每个表单项写信:

Report.Decisions [0]。标题 示例:

<div data-decision class="box box--less-padding">
            <label class="form-item col-md-12">
                <span>Titel </span>
                <input asp-for="Report.Decisions[0].Title" type="text" name="name" value="" placeholder="Indtast titel" />
            </label>
            <label class="form-item col-md-12">
                <span>Beslutning </span>
                <textarea asp-for="Report.Decisions[0].Description"name="decision" value=" " placeholder="indtast beslutning"></textarea>
            </label>
        </div>

我的模特:

public List<Decision> Decisions { get; set; }

是否有一种方法不必为每个相同的项目写[0],[1]等?这样我就可以将其推入列表,列表会自动处理吗?。

对不起,如果这是一个愚蠢的问题,但是我仍然是C#的新人

谢谢!

2 个答案:

答案 0 :(得分:0)

@foreach可以在那里循环Report.Decisions,这是.net mvc。我认为在核心MVC中应该是相同的

答案 1 :(得分:0)

您不应该回发数据列表。

最好可以划分流程,创建一个控制器来单独处理您的决策,并创建一个控制器来处理报告。在融洽的视图中,您可以对决策的编辑视图进行@ Html.Partial调用。像这样:

/Views/Raports/Index.cshtml:

@model myproject.models.Raport

@foreach (var decision in Model.Decisions)
{
    <div>@Html.Partial("/Views/Decisions/Edit.cshtml", decision)</div>
}

<input type="button" onclick="document.getElementById('AddDecision').show();" value="Add" />

<div id="AddDecision" style="display: none;">
    @Html.Partial("/Views/Decisions/Edit.cshtml", new Decision() { RaportId = Model.Id })
</div>

/Views/Decisions/Edit.cshtml:

@model myproject.models.Decision

@using (Html.BeginForm("Edit", "Decisions", new { id = Model.Id })) 
{
    <div>
        @Html.HiddenFor(a => a.RaportId)
        @Html.EditorFor(a => a.Name)
    </div>
    <div>
        @Html.EditorFor(a => a.Description)
    </div>
    <div>
        <input type="submit">
    </div>
}

DecisionsController.cs:

[HttpPost]
public ActionResult Edit(int id, int raportid, string name, string description){
    var item = db.Decisions.FirstOrDefault(a => a.Id == id);
    if (item != null)
    {
        // edit it
    }
    else 
    {
        // add it
    }
}

我从内存中写了这段代码,对于任何错误,我们深表歉意。

您还可以根据您的模型生成控制器/视图,这将为您提供这些部分页面。添加一个新的控制器,而不是选择实体框架生成的模板。