【问题标题】:How to edit repeating fields in a form如何编辑表单中的重复字段
【发布时间】:2023-04-07 18:39:01
【问题描述】:

如何编辑表单中的重复字段(同一模型属性的多个值)?我首先使用带有 Razor 语法的 Visual Studio 2013 ASP.NET MVC 5 Entity Framework 代码。

我已经设法让创建功能正常工作,它成功地将数据添加到数据库中,但是我将如何将这些值带回编辑视图以编辑并重新保存回数据库?例如

我的视图看起来如何

输入说明 |输入金额

Description1TextBox |数量1文本框

Description2TextBox |金额2文本框

Description3TextBox | Amount3TextBox....

@for (int i = 0; i < 5; i++)
{
    <div class="row">
        @Html.TextBoxFor(m => Model.Options[i].Description, new { @class = "form-control col-sm-6" })
        @Html.TextBoxFor(m => Model.Options[i].Amount, new { @class = "form-control col-sm-6" })
    </div>
}

我的视图模型

一个数组

...
public string Description { get; set; }
public decimal? Amount { get; set; }
public Options[] Options { get; set; }
...

My Create Controller Post ActionResult

....
foreach (var optionsLoop in viewModel.Options)
{
    if (optionsLoop.Description != null || optionsLoop.Amount != null)
    {
        var options = new Options()
        {
            Id = getId,
            Description = optionsLoop.Description,
            Amount = optionsLoop.Amount
        };
        db.Options.Add(options);
    }
}
await db.SaveChangesAsync();

我需要进行哪些更改才能将值带回编辑视图然后进行编辑?我可以在 edit controller 操作中执行 Linq 查询以返回一个列表以在我的编辑视图中获取我想要的值,但是如何将这些值从 Linq 查询传递到我的视图中的循环?

...
//Values to bring back into my edit view
var getOptions = (from options in db.Options
                  where options.Id == currentUser.Id
                  select new { options}).Take(5).ToList();
...

【问题讨论】:

  • 通过在模型的属性中分配它?如果您的问题是“How”,则需要显示更多相关代码。
  • 我添加了更多代码,我需要知道如何将数组传递到视图中for循环中的文本框
  • var model = new FooModel { Options = getOptions }; return View(model)...
  • 您需要使用 GET 方法中的选项填充模型(请参阅@CodeCaster 评论)并在视图中使用 @for (int i = 0; i &lt; Model.Options.Count; i++) 并将属性更改为 List&lt;Options&gt; Options
  • 谢谢你们,你们的解决方案结合起来效果很好!

标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5


【解决方案1】:

将模型属性更改为

public List<Option> Options { get; set; }

在控制器的 GET 方法中,使用分配它

model.Options = getOptions; // populate the options
return View(model);

在视图中

@for (int i = 0; i < Model.Options.Count; i++)
{
  <div class="row">
    @Html.TextBoxFor(m => m.Options[i].Description, new { @class = "form-control col-sm-6" })
    @Html.TextBoxFor(m => m.Options[i].Amount, new { @class = "form-control col-sm-6" })
  </div>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多