foreach循环中BeginForm()的ASP.NET MVC路由问题



首先,如果问题很小,请原谅我,但我在ASP.NET方面完全是个新手。我只需要通过我的项目,我就完全陷入了困境。

我正在为网上商店准备一个购物篮功能。可用的文章以以下方式列出:

@foreach( var element in Model.all_products )
{
using( Html.BeginForm( "AddToBasket", "Basket", new { id = @Html.DisplayFor( Model=>element.id ), amountInBasket = Html.DisplayFor( Model => element.amountInBasket ) }, FormMethod.Get ) )
{
<tbody>
<tr id="@Html.DisplayFor( Model => element.id )" class="warning">
<th scope="row">   @Html.DisplayFor( Model => element.name )</th>
<td>               @Html.DisplayFor( Model => element.price )</td>
<td>               @Html.DisplayFor( Model => element.measureUnit )</td>
<td>               @Html.TextBoxFor( Model => element.amountInBasket )</td>
<td> <input type="submit" class="btn-success btn" value="Add to basket"></td>
</tr>
</tbody>
} }

在foreach循环中,我为商店中的每一篇文章创建一个表单。每个表单都包含一个提交,将给定数量的给定产品(element.amountInBasket(添加到购物篮中。我的想法是识别element.id(数据库中的文章id(点击了哪个提交,并将其与element.amountInBasket一起传递给BasketController中的AddToBasket方法。AddToBasket声明开始如下:

[HttpGet]
public async System.Threading.Tasks.Task<ActionResult> AddToBasket( decimal amountInBasket, int id )
{ ...

现在我的问题是,BeginForm((生成的url,比如id=2和amountInBasket=3,是:

https://localhost:44356/Basket/AddToBasket/2?element.amountInBasket=2

导致错误(它表示第二个参数为null(。经过一些尝试,我发现AddToBasket方法所期望的url是:

https://localhost:44356/Basket/AddToBasket/2?amountInBasket=3

所以问题出在";元素"我网址的一部分。一旦我手动删除了这个,我就达到了我的方法,一切都很完美。

有人能告诉我如何解决这个问题吗?对我来说;元素"部分被从url中删除,或者它停留在那里,只有方法被修改以接受它——我只需要到达我的方法。

更改:

using( Html.BeginForm( "AddToBasket", "Basket", new { id = @Html.DisplayFor( Model=>element.id ), amountInBasket = Html.DisplayFor( Model => element.amountInBasket ) }, FormMethod.Get ) )

到此:

using( Html.BeginForm( "AddToBasket", "Basket", new { id = element.id , amountInBasket = element.amountInBasket }, FormMethod.Get ) )

最新更新