我正在开发一个.NET Core 2.0应用程序,我有一个包含两个不同模型的实例的单个视图, Component 和 Value 。我想创建这些模型的所有实例并将其发布到数据库中,但我无法将它们全部发布。目前只有两个模型的第一个实例(行)被发布到Db。
所以我的问题:是否可以做这样的事情?如果是这样的话,怎么样?
以下是我的代码中的几个示例。
我的ViewModel:
public class SheetData
{
public int ID { get; set; }
public Sheet Sheet { get; set; }
public Component Components { get; set; }
public Values Values { get; set; }
}
Razorview :(只有整个视图的一小部分样本)
<div class="row">
<div class="form-group">
<div class="col-md-4">
<span>
<label asp-for="Components.Name" class="control-label"></label>
<input asp-for="Components.Name" class="form-control" value="UpperAnnular" readonly />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.OpenTime" class="control-label"></label>
<input asp-for="Values.OpenTime" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.OpenGal" class="control-label"></label>
<input asp-for="Values.OpenGal" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.CloseTime" class="control-label"></label>
<input asp-for="Values.CloseTime" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.CloseGal" class="control-label"></label>
<input asp-for="Values.CloseGal" class="form-control" />
</span>
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-4">
<span>
<label asp-for="Components.Name" class="control-label"></label>
<input asp-for="Components.Name" class="form-control" value="LowerAnnular" readonly />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.OpenTime" class="control-label"></label>
<input asp-for="Values.OpenTime" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.OpenGal" class="control-label"></label>
<input asp-for="Values.OpenGal" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.CloseTime" class="control-label"></label>
<input asp-for="Values.CloseTime" class="form-control" />
</span>
</div>
<div class="col-md-1">
<span>
<label asp-for="Values.CloseGal" class="control-label"></label>
<input asp-for="Values.CloseGal" class="form-control" />
</span>
</div>
</div>
</div>
控制器:
// GET:
public IActionResult Sheet ()
{
var model = new SheetData();
model.Sheet = new Sheet();
model.Components = new Component();
model.Values = new Values();
//model.Events = new Event();
return View(model);
}
// POST: Sheet/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Sheet(SheetData viewModel)
{
Sheet sheet = viewModel.Sheet;
Component component = viewModel.Components;
Values values = viewModel.Values;
if (ModelState.IsValid)
{
//values.ComponentID = component.ComponentID;
_context.Add(sheet);
//await _context.SaveChangesAsync();
_context.Add(values);
//await _context.SaveChangesAsync();
component.SheetID = sheet.ID;
component.ValuesID = values.ID;
_context.Add(component);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return RedirectToAction(nameof(Index));
}
答案 0 :(得分:0)
您Values
属性必须是集合(例如,List
)。
然后在Razor页面上,您可以通过索引指向每个元素:
<span>
<label asp-for="Values[0].OpenTime" class="control-label"></label>
<input asp-for="Values[0].OpenTime" class="form-control" />
</span>
答案 1 :(得分:0)
也许我只是懒惰,但我发现直接使用数据库比制作更多视图模型更清晰。
我通常将模型添加到“主”模型中,如virtual
,然后在存储库中,我只包含它:return: db.Components.Include(C => C.Values)
这允许我在视图中使用其他模型,只要我想在每次添加时添加.Values
。