[英]ASP.Net Core MVC <select> <option> returns null
处理 ASP.NET Core MVC 应用程序。 我有一个带有@model List<CatalogItem>
的<select><option>
@model List<CatalogItem>
用于我的 Razor 视图。 我想用CatalogItem
项中的值填充表单CartForm
。 当用户选择一个项目并将其发送回操作方法asp-action="CartForm"
,所选项目返回为 null。
我错过了什么?
<select id="itmSelect" name="itmSelect">
foreach (CatalogItem itm in Model)
{
<option class="text-dark" value="@itm">@itm.Description</option>
}
</select>
虽然这并不能解释null
值:
<option>
的value
必须是字符串,或者至少是简单类型。
你的@itm
是一个复杂的类型。
您应该将其更改为:
<option class="text-dark" value="@itm.ID">
通过更改此设置,您至少可以发布正确的选定值,这可能会更好地反映您的发送模型。
正如@Stefan 所说,@itm 是一种复杂类型,我们无法将其直接在选择选项值中传递给控制器。
如果您仍然想根据选择选项传递项目,我建议您可以尝试使用 CatalogItem 属性为选择选项设置一些自定义属性,并在视图上添加隐藏字段,隐藏输入的名称是 CatalogItem 属性名称。
然后您可以使用 jquery 根据下拉列表选择选项设置输入隐藏的值。
asp.net核心模型绑定会根据formdata的名称绑定模型,所以绑定得很好。
更多细节,你可以参考下面的例子。
目录项型号:
public class CatalogItem
{
public int Id { get; set; }
public string Description { get; set; }
public string Name { get; set; }
}
看法:
<form asp-action="DropdownGetValue" id="test1">
<select id="itmSelect" name="Id">
@foreach (var itm in Model)
{
<option class="text-dark" value="@itm.Id" Description="@itm.Description" Name="@itm.Name">@itm.Description</option>
}
</select>
<input type="hidden" name="Description" id="Description" />
<input type="hidden" name="Name" id="Name" />
<input type="submit" value="Click" />
</form>
jQuery 脚本:
<script type="text/javascript">
$(function () {
$("#itmSelect").change(function () {
$("#Description").val($('#itmSelect').find(":selected").attr("Description"));
$("#Name").val($('#itmSelect').find(":selected").attr("Name"));
});
})
</script>
控制器:
[HttpPost]
public IActionResult DropdownGetValue(CatalogItem itmSelect)
{
//_db.Category.Add(ca);
//_db.SaveChanges();
int i = 0;
return Ok();
}
结果:
我在使用 null 值时遇到的问题是因为我没有在 post-back 方法中命名参数以匹配标签的名称。 一旦我把它对齐,一切都奏效了。
感谢所有提供时间和评论的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.