Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用复选框将数据从视图过帐到控制器_C#_Asp.net_Asp.net Mvc_Asp.net Core_Post - Fatal编程技术网

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
}
普罗西莫

因为您的输入名称被顶起。检查我的更新。因为你的输入名称被劫持了。检查我的更新。