代码之家  ›  专栏  ›  技术社区  ›  BayE

提交表格-如何在提交时传递选定的行号

  •  0
  • BayE  · 技术社区  · 7 年前

    以下是模型:

    public class TestModel
    {
        public string Data { get; set; }
        public List<string> Datas { get; set; }
    }
    

    以下是视图:

    @model InventoryWeb.Models.TestModel
    
    @using (Html.BeginForm())
    {
        @Html.DisplayFor(modelItem => Model.Data)
        @Html.HiddenFor(m => m.Data)
    
        <table class="table">
            <tr>
                <th>
                    Data
                </th>
                <th></th>
            </tr>
            @for (int i = 0; i < Model.Datas.Count; i++)
            {
                @Html.Hidden("Datas["+ i + "]", Model.Datas[i])
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => Model.Datas[i])
                    </td>
                    <td>
                        <input type="submit" value="Submit" formaction="SubmitTest" formmethod="post"/>
                    </td>
                </tr>
            }
        </table>
    }
    

    如何将所选行号(用户按下“提交”按钮的行数)传递给控制器?TempData/Viewbag/提交时可用于将此信息传递给控制器站点的任何内容。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Mahmood Dehghan    7 年前

    按照您编写它的方式,它会将任何行的所有数据发送回服务器。

    您可以在每行中插入表单:

    @model InventoryWeb.Models.TestModel
    
    @Html.DisplayFor(modelItem => Model.Data)
    
    <table class="table">
        <tr>
            <th>
                Data
            </th>
            <th></th>
        </tr>
        @for (int i = 0; i < Model.Datas.Count; i++)
        {
    
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => Model.Datas[i])
                </td>
                <td>
        @using (Html.BeginForm())
        {
            @Html.Hidden("rowNumber", i)
                    <input type="submit" value="Submit" formaction="SubmitTest" formmethod="post"/>
        }
                </td>
            </tr>
        }
    </table>
    

    但我更喜欢在这种情况下使用javascript。

    编辑

    使用JavaScript:

    @using (Html.BeginForm("SubmitTest"))
    {
        @Html.DisplayFor(modelItem => Model.Data)
        @Html.HiddenFor(m => m.Data)
        <input type="hidden" id="rowNumber" name="rowNumber" />
    
        <table class="table">
            <tr>
                <th>
                    Data
                </th>
                <th></th>
            </tr>
            @for (int i = 0; i < Model.Datas.Count; i++)
            {
                @Html.Hidden("Datas["+ i + "]", Model.Datas[i])
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => Model.Datas[i])
                    </td>
                    <td>
                        <input type="button" value="Submit" onclick="SubmitForm(@i, this);"/>
                    </td>
                </tr>
            }
        </table>
    }
    
    <script>
    function SubmitForm(i, btn){
        $("#rowNumber").val(i);
        var form = $(btn).closest("form");
        form.submit();
    }
    </script>
    
        2
  •  0
  •   Evan Huang    7 年前

    使用 <button> 更换 <input type="submit" ..> ,并在 <按钮(>);

    @for (int i = 0; i < Model.Datas.Count; i++)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => Model.Datas[i])
            </td>
            <td>
                <button name="rowNumber" value="@i">Submit</button>
            </td>
        </tr>
    }
    

    如果目标post控制器/操作与当前不同,而不是设置 formaction formmethod 在每个提交按钮中,将其设置为 Html.BeginForm() 喜欢

    @using(Html.BeginForm("ActionName", "ControllerName"))
    {
        ...
    }