C# 使用复选框将数据从视图过帐到控制器
我有以下课程:C# 使用复选框将数据从视图过帐到控制器,c#,asp.net,asp.net-mvc,asp.net-core,post,C#,Asp.net,Asp.net Mvc,Asp.net Core,Post,我有以下课程: public class Entidade { public string Voz { get; set; } public bool Valor { get; set; } } 我使用控制器生成视图(GET): public IActionResult Entidade() { var model = GetVoidEntidade.Entidades(); return View(model); } 其中G
public class Entidade
{
public string Voz { get; set; }
public bool Valor { get; set; }
}
我使用控制器生成视图(GET):
public IActionResult Entidade()
{
var model = GetVoidEntidade.Entidades();
return View(model);
}
其中GetVoidEntidade.Entidades()将生成一个包含5行的“Entidade”列表,其中每行都有一个“Entidade”,并带有唯一的“Voz”和“Val”字符串,这将是false
观点:
<form asp-action="Entidade">
@{
int i = 0;
}
@foreach (var entidade in Model)
{
var name = $"Valor[{i++}]";
<input type="checkbox" value="@entidade.Valor" class="form-check-input" name=@name />@entidade.Voz<br />
}
<div class="form-group">
<input type="submit" value="Próximo" class="btn btn-success align-content-end float-md-right" />
</div>
</form>
@{
int i=0;
}
@foreach(模型中的var entidade)
{
var name=$“Valor[{i++}]”;
@entidade.Voz
}
POST控制器就在那里,这样我可以通过调试器选择返回:
[HttpPost]
public IActionResult Entidade([FromBody]IEnumerable<Entidade> model)
{
var boh = Request.Form.Files;
return View();
}
[HttpPost]
公共IActionResult实体([FromBody]IEnumerable模型)
{
var boh=Request.Form.Files;
返回视图();
}
当我运行它并尝试执行POST时,我得到一条错误消息405:methodnotallowed,果然没有得到数据
如何将复选框中的数据接收到控制器中?同一组中的所有项目的名称元素应相同
@foreach (var entidade in Model)
{
//var name = $"Valor[{i++}]";
<input type="checkbox" value="@entidade.Valor" class="form-check-input" name="StaticName" />@entidade.Voz<br />
}
@foreach(模型中的变量entidade)
{
//var name=$“Valor[{i++}]”;
@entidade.Voz
}
同一组中的所有项目的名称元素应相同
@foreach (var entidade in Model)
{
//var name = $"Valor[{i++}]";
<input type="checkbox" value="@entidade.Valor" class="form-check-input" name="StaticName" />@entidade.Voz<br />
}
@foreach(模型中的变量entidade)
{
//var name=$“Valor[{i++}]”;
@entidade.Voz
}
[FromBody]
表示您正在发送类似于application/json
或application/xml
的内容。HTML表单以x-www-form-urlencoded
或multipart/form data
的形式发送。从操作参数中删除[FromBody]
属性。这解决了您当前的问题,但之后,您将得到一个空模型,因为您的输入名称不正确
首先,您需要使用for
而不是foreach
,因为您需要为列表编制索引。其次,您当前生成的名称甚至根本不正确。它应该是这样的:[N].Valor
其中N
是索引。第三,您应该只使用标记帮助器,这样您甚至不需要考虑它。换句话说,您的代码应该是:
<form asp-action="Entidade">
@for (var i = 0; i < Model.Count; i++)
{
<input asp-for="@Model[i].Valor" type="checkbox" class="form-check-input" />
@entidade.Voz<br />
}
<div class="form-group">
<button type="submit" class="btn btn-success align-content-end float-md-right">Próximo</button>
</div>
</form>
@对于(var i=0;i
}
普罗西莫
[FromBody]
表示您正在发送类似于application/json
或application/xml
的内容。HTML表单以x-www-form-urlencoded
或multipart/form data
的形式发送。从操作参数中删除[FromBody]
属性。这解决了您当前的问题,但之后,您将得到一个空模型,因为您的输入名称不正确
首先,您需要使用for
而不是foreach
,因为您需要为列表编制索引。其次,您当前生成的名称甚至根本不正确。它应该是这样的:[N].Valor
其中N
是索引。第三,您应该只使用标记帮助器,这样您甚至不需要考虑它。换句话说,您的代码应该是:
<form asp-action="Entidade">
@for (var i = 0; i < Model.Count; i++)
{
<input asp-for="@Model[i].Valor" type="checkbox" class="form-check-input" />
@entidade.Voz<br />
}
<div class="form-group">
<button type="submit" class="btn btn-success align-content-end float-md-right">Próximo</button>
</div>
</form>
@对于(var i=0;i
}
普罗西莫
因为您的输入名称被顶起。检查我的更新。因为你的输入名称被劫持了。检查我的更新。