剃刀将整个模型对象作为从视图到控制器的选项值进行分页

时间:2018-09-10 13:33:30

标签: asp.net razor razor-pages

我正在寻找一种将当前选定模型从视图传递到控制器的方法。 我的选择代码:

<select asp-for="Product">
            @foreach (var p in Model.Products)
            {
                <option value="@p">@p.ProductName</option>  
            }
        </select>

我正在尝试将选项值@p绑定到我的以下属性:

[BindProperty]
    public Product Product { get; set;}

但是,每当提交我的表单后,Product属性都将具有“ null”值。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为您可以为此使用隐藏类型。在列表中提交后无需查询即可找到ProductName。

<input type="hidden" asp-for="ProductName" />
    <select asp-for="ProductId">
                @foreach (var p in Model.Products)
                {
                    <option value="@p.Id">@p.ProductName</option>  
                }
            </select>

<script>
        $(function () {
            $('form').submit(function () {                
                var productName = $('#ProductId option:selected').text();
                $('#ProductName').val(productName);
             });
         });
    </script>

答案 1 :(得分:0)

通常,发布表单后,您将传递所选项目的ID。通常,足够使用的数据。但是,如果您确实希望ModelBinder从发布的值创建Product实例,则您的表单字段应命名为Product.ProductIdProduct.ProductName。另一个答案显示了如何获取ProductName值,然后将其分配给隐藏字段。

<select asp-for-"Product.ProductId" asp-items="Model.Products">
...
</select>

<input type="hidden" asp-for="Product.ProductName" />