简体   繁体   English

控制器中ID的值始终相同

[英]Always same value for id in controller

guys. 家伙。 I use Asp.net MVC and C#. 我使用Asp.net MVC和C#。 I have 2 buttons for every object on page. 我在页面上的每个对象都有2个按钮。 First button for add in shop cart, second button for view details. 第一个按钮用于添加购物车,第二个按钮用于查看详细信息。 So this buttons generate for every object in my model. 因此,此按钮为模型中的每个对象生成。 I want to pass id field into controller, but i always got id = 1 in action. 我想将id字段传递给控制器​​,但是我总是在操作中得到id = 1。 How i can pass the right id? 我如何传递正确的ID? Can someone explain ? 有人可以解释吗?

Here is form: 这是表格:

@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>
}

And my controller: 而我的控制器:

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

Your issue is that in each loop you are creating a control with the name "id" and on form submission the value in the first one is being picked up. 您的问题是,在每个循环中,您都将创建一个名称为“ id”的控件,并且在提交表单时,将拾取第一个控件中的值。 I see a few options. 我看到一些选择。

One option is to create a new form in each loop: 一种选择是在每个循环中创建一个新表单:

@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>
    }
}

Another option would be to use action links instead of the form submission. 另一种选择是使用操作链接而不是表单提交。 These might look like: 这些可能看起来像:

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

A third way which would allow you to keep your present styling with little effort: 第三种方法可以让您毫不费力地保持当前的样式:

<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="..." />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM