ASP.NET 核心:我想从控制器方法的视图中访问复选框列表(值)
ASP.NET Core: I want to have access to the list of checkboxes (value) from my view on my controller's method
在我看来,我有类似这样的标记:
@model C.Models.CM
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div class="form-group">
<label asp-for="Date" class="control-label"></label>
<input asp-for="Date" class="form-control" />
<span asp-validation-for="Date" class="text-danger"></span>
</div>
<div class="row">
<select data-placeholder="Select Item" asp-for="IdItem" class="form-control" asp-items="ViewBag.Items"></select>
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var cdos in ViewBag.Modelon.Cdos)
{
<input id=@cdos.Id type="checkbox" value=@cdos.Id class="w3-check" />@cdos.Name<br />
}
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var ctres in ViewBag.Modelon.Ctres)
{
<input id=@ctres.Id type="checkbox" value=@ctres.Id class="w3-check" />@ctres.Name<br />
}
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
这里要理解的重要一点是,除了视图中的其他附加信息之外,此标记生成的数字 N CheckBox
取决于数据库中插入的数据。
视图如下所示:
My View
因此,正如您所看到的,CheckBox 的数量从 1 变为 N。
我的问题如下,我无法理解如何在我的控制器中获取 CheckBox 组数据。我什至不知道这些信息是否真的被发送到控制器。
我的控制器中有以下代码:
public async Task<IActionResult> Create(List<string> slct)
{
System.Diagnostics.Debug.WriteLine("test");
foreach (string value in slct)
{
System.Diagnostics.Debug.WriteLine(value);
};
System.Diagnostics.Debug.WriteLine("test");
return RedirectToAction(nameof(Index));
}
我希望我的代码根据来自复选框的信息做某些事情,现在我试图查看视图中的所有数据是否都作为 select 列表发送,但事实并非如此,因为除了“测试”之外,此代码不会在调试屏幕中打印任何内容。
我做了研究,人们推荐了以下链接来学习如何在控制器中加载相关数据。
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/read-related-data?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/update-related-data?view=aspnetcore-5.0
问题是无论我读了多少教程,我都无法理解它们或解决如何将它们应用到我的案例中,因为它们使用的是一个复杂得多的示例,而且代码我需要使用的是类型
await _context.Model.Include(a => a.Thing1)
.Include(b => b.Thing2)
.ThenInclude(c => c.Whatiscwhatisbwat??)
当然没有帮助(编写该代码对我来说非常混乱,我无法理解它的作用)。
那么,好吧,有人可以帮我提供比教程中的解释更简单的解释来解决这个问题吗?在我从控制器中提到的方法中,我想以任何格式(如列表、数组等)访问视图中的两组复选框及其 selected 值,我知道我必须实现一个包含代码,但我不知道该怎么做,或者是否有更简单的解决方案。
I want to have access to the two groups of checkboxes from the view and their selected values
请注意,您没有为这些复选框输入指定 name
属性,这将导致所有选中的值都不会发布到服务器端。
为了达到您的上述要求,您可以修改如下代码。
为复选框指定 name
属性
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var cdos in ViewBag.Modelon.Cdos)
{
<input id=@cdos.Id type="checkbox" name="selectedCdos" value=@cdos.Id class="w3-check" />@cdos.Name<br />
}
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var ctres in ViewBag.Modelon.Ctres)
{
<input id=@ctres.Id type="checkbox" name="selectedCtres" value=@ctres.Id class="w3-check" />@ctres.Name<br />
}
</div>
接受检查值作为参数的操作方法
public async Task<IActionResult> Create(ModelOfCheckedVals slct)
{
//...
//code logic here
//...
型号classModelOfCheckedVals
public class ModelOfCheckedVals
{
public List<int> selectedCdos { get; set; }
public List<int> selectedCtres { get; set; }
}
测试结果
在我看来,我有类似这样的标记:
@model C.Models.CM
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div class="form-group">
<label asp-for="Date" class="control-label"></label>
<input asp-for="Date" class="form-control" />
<span asp-validation-for="Date" class="text-danger"></span>
</div>
<div class="row">
<select data-placeholder="Select Item" asp-for="IdItem" class="form-control" asp-items="ViewBag.Items"></select>
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var cdos in ViewBag.Modelon.Cdos)
{
<input id=@cdos.Id type="checkbox" value=@cdos.Id class="w3-check" />@cdos.Name<br />
}
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var ctres in ViewBag.Modelon.Ctres)
{
<input id=@ctres.Id type="checkbox" value=@ctres.Id class="w3-check" />@ctres.Name<br />
}
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
这里要理解的重要一点是,除了视图中的其他附加信息之外,此标记生成的数字 N CheckBox
取决于数据库中插入的数据。
视图如下所示:
My View
因此,正如您所看到的,CheckBox 的数量从 1 变为 N。
我的问题如下,我无法理解如何在我的控制器中获取 CheckBox 组数据。我什至不知道这些信息是否真的被发送到控制器。
我的控制器中有以下代码:
public async Task<IActionResult> Create(List<string> slct)
{
System.Diagnostics.Debug.WriteLine("test");
foreach (string value in slct)
{
System.Diagnostics.Debug.WriteLine(value);
};
System.Diagnostics.Debug.WriteLine("test");
return RedirectToAction(nameof(Index));
}
我希望我的代码根据来自复选框的信息做某些事情,现在我试图查看视图中的所有数据是否都作为 select 列表发送,但事实并非如此,因为除了“测试”之外,此代码不会在调试屏幕中打印任何内容。
我做了研究,人们推荐了以下链接来学习如何在控制器中加载相关数据。
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/read-related-data?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/update-related-data?view=aspnetcore-5.0
问题是无论我读了多少教程,我都无法理解它们或解决如何将它们应用到我的案例中,因为它们使用的是一个复杂得多的示例,而且代码我需要使用的是类型
await _context.Model.Include(a => a.Thing1)
.Include(b => b.Thing2)
.ThenInclude(c => c.Whatiscwhatisbwat??)
当然没有帮助(编写该代码对我来说非常混乱,我无法理解它的作用)。
那么,好吧,有人可以帮我提供比教程中的解释更简单的解释来解决这个问题吗?在我从控制器中提到的方法中,我想以任何格式(如列表、数组等)访问视图中的两组复选框及其 selected 值,我知道我必须实现一个包含代码,但我不知道该怎么做,或者是否有更简单的解决方案。
I want to have access to the two groups of checkboxes from the view and their selected values
请注意,您没有为这些复选框输入指定 name
属性,这将导致所有选中的值都不会发布到服务器端。
为了达到您的上述要求,您可以修改如下代码。
为复选框指定 name
属性
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var cdos in ViewBag.Modelon.Cdos)
{
<input id=@cdos.Id type="checkbox" name="selectedCdos" value=@cdos.Id class="w3-check" />@cdos.Name<br />
}
</div>
<div class="form-group">
<input id="cboAll" type="checkbox" value="CheckAll / unCheck" /> All<br />
@foreach (var ctres in ViewBag.Modelon.Ctres)
{
<input id=@ctres.Id type="checkbox" name="selectedCtres" value=@ctres.Id class="w3-check" />@ctres.Name<br />
}
</div>
接受检查值作为参数的操作方法
public async Task<IActionResult> Create(ModelOfCheckedVals slct)
{
//...
//code logic here
//...
型号classModelOfCheckedVals
public class ModelOfCheckedVals
{
public List<int> selectedCdos { get; set; }
public List<int> selectedCtres { get; set; }
}
测试结果