如何捕获选定的行ID - MVC表

时间:2013-08-06 19:14:58

标签: asp.net-mvc asp.net-mvc-4 razor

我在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")
    {

    }
}   

2 个答案:

答案 0 :(得分:1)

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

如果行ID不是模型的一部分,您只需向action方法添加一个与隐藏字段同名的参数。

如果您需要更多详细信息,请与我们联系。我在我的一个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());

    });

});

答案 1 :(得分: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>