我一直在搜索,但没有一个答案真正为我的特定情况提供了适当的细节。
首先,我正在努力: - ASP.Net核心Web应用程序 - .Net Core 2.0开发工具 - Visual Studio 2017
我7年后回到ASP.Net并且已经发生了很多变化。
是的,我的问题是:
我想创建一种Master-Detailed View:
我有一个“套餐”模型和一个“世界”模型
我为
创建了scaffolded Item现在我的数据库结构就像
封装 - PackageID(PK) - PakageName
世界: - WorldID(PK) - WorldName
PackageWorld: - ID(PK) - PackageID(FK) - WorldID(FK)
我正在尝试的是:
我为Package in Package>> Index.cshtml中的每个字段添加了一个“AddWorld”链接。单击它会触发PackageController中的AddWorld函数。此AddWorld控制器显示前面的世界列表和复选框。
现在我想要的是:提交表单,我应该在控制器中收到带有复选框数据的数据,以便我可以应用我的逻辑,即在PackageWorld数据库表中添加每个选定的世界。
我见过很多人用过
FormCollection
检索表单数据,但每次运行时,都要求我将其绑定到模型。
但是我的情况有所不同,因为我不知道它会有多少世界,我实际上无法创建一个模型。或者我可以吗?
以下是我的代码:
获取:AddWorld(PackageController.cs)
// GET: Packages/AddWorld/5
public async Task<IActionResult> AddWorld(string id)
{
var model = await _context.World.ToListAsync();
ViewData["PackageID"] = id;
return View(await _context.World.ToListAsync());
}
AddWorld.cshtml(在Views&gt;&gt; Packages文件夹中)
@{ int count = 0; }
<form asp-action="AddWorld">
<table class="table">
<thead>
<tr>
<th></th>
<th>
@Html.DisplayNameFor(model => model.WorldID)
</th>
<th>
@Html.DisplayNameFor(model => model.WorldName)
</th>
@*<th></th>*@
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
count++;
<tr>
<td><input type="checkbox" name="cbox" id="cbox" /></td>
<td>
@Html.DisplayFor(modelItem => item.WorldID)
</td>
<td>
@Html.DisplayFor(modelItem => item.WorldName)
</td>
@*<td>
<a asp-action="Edit" asp-route-id="@item.WorldID">Edit</a> |
<a asp-action="Details" asp-route-id="@item.WorldID">Details</a> |
<a asp-action="Delete" asp-route-id="@item.WorldID">Delete</a>
</td>*@
</tr>
}
</tbody>
</table>
<input type="hidden" id="count" value="@count;" />
<input type="hidden" id="PackageID" value="@ViewData["PackageID"]" />
<input type="submit" value="Add" class="btn btn-default" /> |
<a asp-action="Index">Back to Package List</a>
</form>
我该怎么办?
// POST: Packages/AddWorld/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> AddWorld(FormCollection WorldList)
{
感谢任何帮助。