在 ASP.net MVC Core 中将表行文本框值从视图传递到控制器

问题描述 投票:0回答:1
c# asp.net-core model-view-controller core
1个回答
0
投票

在每一行“下载”按钮上单击“我需要传递 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如何工作,请参考这个官方文档

© www.soinside.com 2019 - 2024. All rights reserved.