我正在寻找一种将当前选定模型从视图传递到控制器的方法。 我的选择代码:
<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”值。 有什么建议吗?
答案 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.ProductId
和Product.ProductName
。另一个答案显示了如何获取ProductName值,然后将其分配给隐藏字段。
<select asp-for-"Product.ProductId" asp-items="Model.Products">
...
</select>
<input type="hidden" asp-for="Product.ProductName" />