在每一行“下载”按钮上单击“我需要传递 NewSerialNumber” 从视图到控制器的文本框值。目前它正在传递 null 根据传递的值将值传递给控制器操作方法 下载特定文件。
嗯,似乎您正在尝试在单击按钮后将
TextBoxFor(modelItem => item.newSerialNumber)
值从视图传递到控制器。但是将其作为新参数对象发送new { newSerialNumber = item.newSerialNumber }
总是会传递空值。
但是,您可以使用 asp-route-{value} 属性并传递您的 newSerialNumber 作为路由 id 来满足您的要求。如果它在同一个控制器中,您只需要传递路由参数,即您的控制器操作的方法参数或参数。
因此,为了将文本框值传递给控制器操作,您可以执行以下操作:
演示模型:
public class DemoModelClass
{
public string ecuType { get; set; }
public string exp { get; set; }
public string ecuSft { get; set; }
public int newSerialNumber { get; set; }
}
加载视图的控制器操作:
public IActionResult SaveIndex()
{
var demoList = new List<DemoModelClass>()
{
new DemoModelClass(){ newSerialNumber = 1001,ecuType ="ecuType-A",exp ="exp-X", ecuSft = "ecuSft-P"},
new DemoModelClass(){ newSerialNumber = 1002,ecuType ="ecuType-B",exp ="exp-Y", ecuSft = "ecuSft-Q"},
new DemoModelClass(){ newSerialNumber = 1003,ecuType ="ecuType-C",exp ="exp-Z", ecuSft = "ecuSft-R" }
};
return View(demoList);
}
查看:
@model IEnumerable<DotNet6MVCWebApp.Controllers.DemoModelClass>
<form method="post" asp-controller="ctrName" asp-action="Index">
<input type="text" class="form-control >
<button type="submit">
Search
</button>
<table class="table" border="1">
<thead style="font-size:90%;">
<tr>
<th>
@Html.DisplayNameFor(model => model.ecuType)
</th>
<th>
@Html.DisplayNameFor(model => model.exp)
</th>
<th>
@Html.DisplayNameFor(model => model.ecuSft)
</th>
<th>
@Html.DisplayNameFor(model => model.newSerialNumber)
</th>
<th>Download</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ecuType)
</td>
<td>
@Html.DisplayFor(modelItem => item.exp)
</td>
<td>
@Html.DisplayFor(modelItem => item.ecuSft)
</td>
<td>
@Html.TextBoxFor(modelItem => item.newSerialNumber)
</td>
<td>
<a asp-action="DownloadFile" class="btn btn-primary" asp-route-newSerialNumber="@item.newSerialNumber">Download</a>
</td>
</tr>
}
</tbody>
</table>
</form>
控制器动作:
public IActionResult DownloadFile(int newSerialNumber)
{
return View();
}
输出:
注意:如果您想了解更多asp-route Arrtibute如何工作,请参考这个官方文档。