使用 table 提交表单 - 如何在提交时传递选定的行号
Submit form with table - how to pass the selected row number on submit
这是模型:
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>
}
如何将选定的行号(用户按下"Submit"按钮的行号)传递给控制器? TempData/Viewbag/whatever 可以在提交时将此信息传递给 Controller 站点。
按照您编写的方式,它会将任何行的所有数据发送回服务器。
您可以在每一行中插入一个表格:
@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>
用<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>
}
如果目标 post Controller/Action 与当前目标不同,则不要在每个提交按钮中设置 formaction
和 formmethod
,而是在 Html.BeginForm()
喜欢
@using(Html.BeginForm("ActionName", "ControllerName"))
{
...
}
这是模型:
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>
}
如何将选定的行号(用户按下"Submit"按钮的行号)传递给控制器? TempData/Viewbag/whatever 可以在提交时将此信息传递给 Controller 站点。
按照您编写的方式,它会将任何行的所有数据发送回服务器。
您可以在每一行中插入一个表格:
@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>
用<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>
}
如果目标 post Controller/Action 与当前目标不同,则不要在每个提交按钮中设置 formaction
和 formmethod
,而是在 Html.BeginForm()
喜欢
@using(Html.BeginForm("ActionName", "ControllerName"))
{
...
}