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