[英]C# MVC - Passing ViewModel object from View to Controller
当我尝试将对象从View传递到HttpPOST方法时,似乎有些困难。
单击我的视图中的按钮后,代码将触发POST方法,但没有数据通过。 我尝试过更新方法参数并传递不同的值(如Ints),但无济于事。
这是我的HttpPOST方法:
[HttpPost]
public async Task<ActionResult> BookClass(MemberClassViewModel memberClassViewModel)
{
return RedirectToAction("Index");
}
传入的参数始终似乎为NULL。
这是我的视图的代码。 该模型的类型为IEnumerable,即我的ViewModel对象的列表,在我的情况下为3个对象。 我想要实现的是,单击适当的按钮,将导致那个对象被传递回我的HttpPOST方法。 我尝试在'value'参数中传递各种值。
@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>
}
谢谢
我已经将您的表单重新写得更加裸露,因此您可以理解,您需要name
字段与控制器端的命名相关。
如果您有MyModel.PropertyName
Model对象,则它必须具有某种属性/属性。 您现在正在使用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>
}
编辑:
我明白了您的意思,所以我要尝试做的是,如果用户单击特定Gym班级的某个按钮,该操作将被发布回我的方法。 然后,我进行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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.