C#MVC-将ViewModel对象从视图传递到控制器
当我试图将一个对象从我的视图传递到我的HttpPOST方法时,我似乎遇到了困难 在我的视图中单击按钮时,代码会点击POST方法,但没有数据被传递。我尝试过更新方法参数并传递不同的值(如int),但没有效果 以下是我的HttpPOST方法: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]
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");
}