【问题标题】:Always same value for id in controller控制器中的 id 值始终相同
【发布时间】:2018-06-16 15:44:18
【问题描述】:

伙计们。我使用 Asp.net MVC 和 C#。页面上的每个对象都有 2 个按钮。第一个按钮用于添加购物车,第二个按钮用于查看详细信息。所以这个按钮会为我模型中的每个对象生成。我想将 id 字段传递给控制器​​,但我总是得到 id = 1 的作用。我怎样才能传递正确的ID?谁能解释一下?

这是表格:

@model IEnumerable<StickerOn.Models.Sticker>
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("RedirectButton", "Sticker", FormMethod.Post))
{
    <div style="margin-left:50px">
        <div class="body-content">
            @for (int i = 0; i < Model.Count() - 1; i++)
            {
                <div class="row">
                    @foreach (var item in Model)
                    {
                        <div class="col-md-4">
                            <div class="thumbnail">
                                <img src="@item.ImgToReprs" alt="..." width="200" height="100">
                                <div class="caption">
                                    <h3>@item.Name</h3>
                                    @Html.DisplayFor(m => item.id)
                                    <input type="hidden" name="id" value="@item.id" />
                                    <p><button type="submit" id="@item.id" name="submitButton" class="btn btn-success"><i class="glyphicon glyphicon-shopping-cart"></i></button><input type="submit" name="submitButton" class="btn btn-default" value="..." /></p>
                                </div>
                            </div>
                        </div>
                    }
                </div>
            }
        </div>
    </div>
}

还有我的控制器:

[HttpPost]
public ActionResult RedirectButton(int? id,string submitButton)
        {
            var g = Request.Form["id"];
            switch(submitButton)
            {
                case "...":
                    return Details(1);
                case "":
                    break;
            }
            return View();
        }

【问题讨论】:

  • 我想因为&lt;input type="hidden" name="id" value="@item.id" /&gt; 在同一个表单中重复了很多次,所以第一个值被采用了。
  • 最简单的尝试也是重复表单控件
  • 我想如果我会使用很多表单控件,我的代码会很大很笨拙
  • @SBFrancies,我怎样才能避免它并传递正确的 id?
  • 您可以使用操作链接并指定参数。

标签: c# asp.net asp.net-mvc web controller


【解决方案1】:

您的问题是,在每个循环中,您都在创建一个名为“id”的控件,并且在表单提交时,第一个中的值被拾取。我看到了一些选项。

一种选择是在每个循环中创建一个新表单:

@foreach (var item in Model)
{
    @using (Html.BeginForm("ActionName", "ControllerName"))
    {
        <div class="col-md-4">
            <div class="thumbnail">
                <img src="@item.ImgToReprs" alt="..." width="200" height="100">
                    <div class="caption">
                        <h3>@item.Name</h3>
                        @Html.DisplayFor(m => item.id)
                        <input type="hidden" name="id" value="@item.id" />
                        <p><button type="submit" id="@item.id" name="submitButton" class="btn btn-success"><i class="glyphicon glyphicon-shopping-cart"></i></button><input type="submit" name="submitButton" class="btn btn-default" value="..." /></p>
                </div>
            </div>
        </div>
    }
}

另一种选择是使用操作链接而不是表单提交。这些可能看起来像:

@ActionLink("Text", "ActionName", ("ControllerName",) new { id=item.id }, new { @class="btn" })

第三种方法可以让您毫不费力地保持当前的样式:

<a href="@Url.Action("Action","Controller", new {id=item.id })"><i class="glyphicon glyphicon-shopping-cart"></i></a>

<input type="button" onclick="location.href='@Url.Action("Action","Controller", new {id=item.id })';" value="..." />

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多