当我尝试将一个对象从我的View传递给我的HttpPOST方法时,我似乎遇到了困难。
单击我视图中的按钮后,代码会命中POST方法,但没有数据通过。我尝试更新方法参数并传递不同的值(如Ints),但无济于事。
这是我的HttpPOST方法:
[HttpPost]
public async Task<ActionResult> BookClass(MemberClassViewModel memberClassViewModel)
{
return RedirectToAction("Index");
}
传入的参数似乎总是为NULL。
以下是我的View的代码。 Model是IEnumerable类型,即我的ViewModel对象列表,在我的例子中是3个对象。我想要实现的是,单击相应的按钮,将导致一个对象被传递回我的HttpPOST方法。我尝试过传递“价值”中的各种价值观&#39;参数。
@model IEnumerable<GymTracker.ViewModel.MemberClassViewModel>
@{
ViewData["Title"] = "BookClass";
}
<h2>Book Class</h2>
@foreach (var item in Model)
{
<form method="post">
<div>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ClassName)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.ClassName)
</dd>
<dt>
<button>Book Class</button>
<input type="hidden" asp-action="BookClass" asp-controller="Members" value="@item"/>
</dt>
</dl>
</div>
</form>
}
由于
答案 0 :(得分:2)
我已经重新编写了您的表单,因此您可以理解您需要name
字段与您在控制器端的命名相关联。
如果您有MyModel.PropertyName
模型对象,则它必须具有某种属性/属性。你现在用item
做什么是你试图将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>
}
编辑:
我明白你的意思,所以我想做的是,如果用户点击 在某个特定健身房类的某个按钮上,会被回发 我的方法。然后我做我的SQL写等(更新这个类说 +1会员已预订此内容。)
你能做的是:
@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");
}