如何编辑表单

时间:2015-06-23 19:44:22

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

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

我设法让创建功能正常运行,将数据成功添加到数据库但是如何将这些值重新带回编辑视图以编辑并重新保存回数据库? e.g。

我的观看次数

输入描述|输入金额

Description1TextBox | Amount1TextBox

Description2TextBox | Amount2TextBox

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

我的ViewModel

数组

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

我的创建控制器发布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();

我需要更改什么才能将值重新带回编辑视图然后进行编辑?我可以在编辑控制器操作中执行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();
...

1 个答案:

答案 0 :(得分: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>
}