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

时间:2017-12-26 00:14:26

标签: c# asp.net-mvc razor form-submit html.beginform

以下是模型:

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 /在提交时用于将此信息传递给Controller站点的任何内容。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

使用call.enqueue(new Callback<RetrofitResponce>() { @Override public void onResponse(Call<RetrofitResponce> call, Response<RetrofitResponce> response) { if (response.isSuccessful()) { RetrofitResponce retrofitResponce= response.body(); if (retrofitResponce!=null) { Error error = retrofitResponce.getError(); Result result=retrofitResponce.getResult(); Log.e("Eroor", "rr " + error.getTitle().toString()); } } } @Override public void onFailure(Call<RetrofitResponce> call, Throwable t) { Log.e("Failure ", "fail " + t.toString()); } }); 替换<button>,并在<input type="submit" ..>

的值中设置行号
<button>

如果目标帖子控制器/操作与当前帖子不同,而不是在每个提交按钮中设置@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> } formaction,请在formmethod中设置

Html.BeginForm()