1

我在 MVC 中有表格布局(见下面的代码),在每个表格行上我都有一个提交按钮。每个提交按钮发布到相同的控制器方法“TableSample”。如何捕获选定的行 id 并发布它?

public class TableSample
{
    public string Property1 { get; set; }

    public string Property2 { get; set; }

    public int Property3 { get; set; }

    public List<Things> Things;
}

@Html.TextBoxFor(m => m.Property1)
@Html.TextBoxFor(m => m.Property2)
@Html.TextBoxFor(m => m.Property3)
<table>
    <tbody>
    @foreach (var thing in Model.Things)
    {
        <tr>
            <td>@thing.ID</td>
            <td>@thing.Name</td>
            <td><input type="submit" value="Select" name="Command" /></td>
        </tr>
    }
    </tbody>
</table>


[HttpPost]
public ActionResult TableSample(TableSample sample, string Command)
{
    if (Command == "Select")
    {
        //How to capture selected row ID?
    }

    if (Command == "Other")
    {

    }
}   
4

2 回答 2

1

使用 javascript 捕获提交按钮单击并将行 ID 放置在隐藏字段中,这样它将与其余字段一起提交。

如果行 ID 不是模型的一部分,您可以简单地向操作方法添加一个与隐藏字段同名的参数。

如果您需要更多详细信息,请告诉我。我在我的一个 mvc 应用程序中做了基本相同的事情。

基本上3个步骤:

1)添加隐藏输入。我们将只使用直接的 HTML 而不是帮助器,因为该字段不会成为模型的一部分。把它放在表格中的某个地方:

<input type="hidden" id="rowId" name="rowId" />

2)修改动作方法签名以包含新参数(我假设它是一个整数,但如果不是,您可以相应地更改类型):

public ActionResult TableSample(TableSample sample, string Command, int rowId)

3) 添加 javascript 以捕获提交按钮单击并将行 ID 放置在隐藏字段中。我更喜欢 jQuery,并且我假设您可以访问它,因为它是 MVC 4 的标准:

$(function () {

    $('input[name="command"]').click(function () {

        // because there is a command button on each row it is important to
        // retrieve the id that is in the same row as the button
        $('#rowId').val($(this).parents('tr:first').children('td:first').html());

    });

});
于 2013-08-06T19:20:04.537 回答
0

如果您注意到 rowID 的含义,这将有点容易,因为它在您的代码中不存在。但就我所知,你的意思是从第一行开始的 id 。

在控制器中:

[HttpPost]
public ActionResult TableSample(TableSample sample, string Command, int rowid)
{
    if (Command == "Select")
    {
       rowid
    }

    if (Command == "Other")
    {

    }
}   

在视图中:

<script>
    $('input[name=Command]').click(function(){
      var rowID = $(this).closest('tr').find(".rowid").val()
      $post('/Home/TableSample?rowid='+rowID+ '&Command=Select')
     });

    </script>

<table>
    <tbody>
    @foreach (var thing in Model.Things)
    {
        <tr>
            <td class="rowid">@thing.ID</td>
            <td>@thing.Name</td>
            <td><input type="submit" value="Select" name="Command" /></td>
        </tr>
    }
    </tbody>
</table>
于 2013-08-06T20:19:56.737 回答