C#MVC-将ViewModel对象从视图传递到控制器

C#MVC-将ViewModel对象从视图传递到控制器,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,当我试图将一个对象从我的视图传递到我的HttpPOST方法时,我似乎遇到了困难 在我的视图中单击按钮时,代码会点击POST方法,但没有数据被传递。我尝试过更新方法参数并传递不同的值(如int),但没有效果 以下是我的HttpPOST方法: [HttpPost] public async Task<ActionResult> BookClass(MemberClassViewModel memberClassViewModel) { return

当我试图将一个对象从我的视图传递到我的HttpPOST方法时,我似乎遇到了困难

在我的视图中单击按钮时,代码会点击POST方法,但没有数据被传递。我尝试过更新方法参数并传递不同的值(如int),但没有效果

以下是我的HttpPOST方法:

    [HttpPost]
    public async Task<ActionResult> BookClass(MemberClassViewModel memberClassViewModel)
    {
        return RedirectToAction("Index");
    }
[HttpPost]
公共异步任务
任何帮助都将不胜感激


谢谢

我将您的表单重新写得更简单了一点,这样您就可以理解您需要
name
字段来关联控制器端的命名

如果您有一个
MyModel.PropertyName
Model对象,它必须具有某种属性。您现在使用
项所做的是尝试将
MyModel
存储在一个永远不会工作的输入字段中
MyModel
需要一个属性,我们称之为
MyAttribute
,它可以是名称(字符串)或id(int)来关联一本独特的书

@foreach (var item in Model)
{
    <form asp-action="BookClass" asp-controller="Members" method="post">
        <button type="submit">Book Class</button>
        <input type="hidden" name="MyModel.MyAttribute" value="@item.MyAttribute"/>      
    </form>  
}

使用
提交表单数据。您应该使用foreach,因为您已将模型列表绑定到视图中可能存在的副本I已修改输入类型并删除按钮。但是,仍然没有值被传递回我的HttpPOST方法。我已经按照上面的链接转到了另一个问题,但是没有用,您没有生成任何表单控件,因此没有要提交的内容,所以您的意思是我无法将整个对象发送回控制器?它的所有属性?我将尝试你的建议,只返回一个attribute@Metzer不,你不能在一个输入字段中存储一个完整的对象,你需要单独存储它的属性。对了,谢谢你的帮助,我将玩一玩。我想没有办法存储多个属性?比如说,我的对象有3个属性,如果无法传回整个对象,我想传回3个单独的属性。这是吗possible@Metzer这取决于您可以尝试将哪些类型的属性存储在单个字符串中,并使用“|”等分隔属性,以及控制器中用于分隔属性的逻辑。
@foreach (var item in Model)
{
    <form asp-action="BookClass" asp-controller="Members" method="post">
        <button type="submit">Book Class</button>
        <input type="hidden" name="MyModel.MyAttribute" value="@item.MyAttribute"/>      
    </form>  
}
@foreach (var gym in Model)
{
    <a asp-action="BookClass" asp-controller="Members" asp-route-id="@gym.Id">@gym.Name</a>
}
[HttpGet([controller]/[action]/{id})]
public ActionResult BookClass(int id)
{
    //get the gym based on the id

    return RedirectToAction("Index");
}