繁体   English   中英

ASP.NET 核心 MVC<select><option>返回空值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM