我有一个表单页面,应该更新数据库表中的多行。我使用ViewModel生成表单页面UI。
我希望UI表中的每一行都作为一行发送到数据库表。
OptionValueID在控制器中设置。但是TcSetID的值来自UI中的Property的ID。
控制器
public ActionResult Create(int id)
{
var model = new SetValue { OptionValueID = id };
var ov = db.OptionValue.Include(x => x.Option).FirstOrDefault(x => x.OptionValueID == id);
var opid = ov.OptionID;
var op = db.Option.Include(x => x.TechnicalCharacteristic).FirstOrDefault(x => x.OptionID == opid);
var tcid = op.TechnicalCharacteristicID;
var tc = db.TechnicalCharacteristic.Include(x => x.TcSets).FirstOrDefault(x => x.TechnicalCharacteristicID == tcid);
var tcset = tc.TcSets;
var opv = db.OptionValue.FirstOrDefault(x => x.OptionValueID == id);
ViewBag.OptionValue = opv.OptionVal;
ViewBag.Option = opv.Option.OptionName;
ViewBag.Lsystem = opv.Option.Lsystem.LsystemName;
ViewBag.FamilyName = opv.Option.Lsystem.LsystemFamily.FamilyName;
ViewBag.TcSetID = new SelectList(tcset, "TcSetID", "SetName");
//ViewBag.OptionValueID = new SelectList(db.OptionValue,"OptionValueID","OptionVal",)
return View(model);
}
public class SetValue
{
public int SetValueID { get; set; }
public string Value { get; set; }
public bool Status { get; set; }
public int TcSetID { get; set; }
public int OptionValueID { get; set; }
public virtual OptionValue OptionValue { get; set; }
public virtual TcSet TcSet { get; set; }
}
查看(使用ViewModel的摘录)
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.HiddenFor(model => model.OptionValueID)
@Html.LabelFor(model => model.TcSetID, "TcSetID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("TcSetID", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.TcSetID, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Value, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Value, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Value, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Status, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
@Html.EditorFor(model => model.Status)
@Html.ValidationMessageFor(model => model.Status, "", new { @class = "text-danger" })
</div>
</div>
</div>
我需要将所有值提交给Create方法,以便将值保存到表中。手动添加了图像中数据库表中的数据。
我试图创建ViewModel的对象列表。正如我在SO中的几个问题中所读到的那样。但是我无法创建ViewModel对象列表,因为它显示ViewModel是一个类型并且正在用作变量。
List<AddSetValue> as = new List<AddSetValue> {new AddSetValue{SetValue=new SetValue{OptionValueID=6},TcSet=tcset.TcSets}};
正如我在其他答案中读到的那样,我应该为我的视图中的每一行编制索引,并且必须在我的Post Create方法中将其提交到forloop中的每一行。但我目前无法指定一份清单。
还有其他方法可以将多行提交到数据库吗?
答案 0 :(得分:1)
如果需要viewModel的列表,只需创建对象的List。阻碍了某些事情(但正确添加你的属性,因为我还没有完全理解你的对象。
var viewModel = new List<AddSetValue>();
viewModel.Add(new AddSetValue
{
SetValue = new SetValue{
OptionValueID = 6
}
};
在视图中,你应该有以下模型添加顶部:
@model List<ViewModels.AddSetValue>
而不是:
@model ViewModels.AddSetValue
在这些更改之后,您应该可以遍历对象列表......您应该使用索引列表选项:
for(var i = 0; i < Model.Count; i++)
{
...
}