在ASP.NET Core MVC中使用标签助手

发布于 2025-02-06 16:34:59 字数 4662 浏览 1 评论 0原文

我正在使用列表来分配下拉列表。但它显示了此错误:

system.invalidoperationException:“实体类型'selectListGroup'需要定义一个主键。如果您打算使用无钥匙实体类型,请在“ on ModelCreating”中调用“ hasnokey”。有关无钥匙实体类型的更多信息,请参见 https://go.microsoft.com /fwlink/?linkId = 2141943。'

如何解决此错误?

这是我的代码:

namespace ComSoft.Models
{
        public class Pending
        {
            [Key]
            public int Id { get; set; }
            [Required]
            [DisplayName("SUPPLIER NAME")]
            public string BP_SupplierName { get; set; }
            [DisplayName("COUNTRY")]
            public string BP_Country { get; set; }
            [DisplayName("ITEM")]
            //public string BP_Item { get; set; }
            //[Key]
            public List<SelectListItem> BP_Item { get; } = new List<SelectListItem>
            {
                new SelectListItem { Value = "1", Text = "POLYESTER STAPLE FIBER" },
                new SelectListItem { Value = "2", Text = "MECHINARY(TSUDAKOMA)" },
                new SelectListItem { Value = "3", Text = "SIDE RECYCLING MACHINE"  },
                new SelectListItem { Value = "4", Text = "QUILTING MACHINE"  },
                new SelectListItem { Value = "5", Text = "INDUSTRIAL SEWING MACHINE"  },
                new SelectListItem { Value = "6", Text = "SEWING MACHINE NEEDLE"  },
            };
            [DisplayName("VALUE")]
            public int BP_Value { get; set; }
            [DisplayName("P/I No.")]
            public char BP_PINo { get; set; }
            [DisplayName("ERP REMARKS")]
            public string BP_ERPRemarks { get; set; }
            [DisplayName("TRADE TERM")]
            public string BP_TradeTerm { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("SHIP. DATE")]
            public DateTime BP_ShipDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("PI RECEIVED DATE")]
            public DateTime BP_PIReceivedDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("BANK APPLIED DATE")]
            public DateTime BP_BankAppliedDate { get; set; }
            [DisplayName("BUYER")]
            public string BP_Buyer { get; set; }
            [DisplayName("STYLE")]
            public char BP_Style { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("L/C OPEN DATE")]
            public DateTime BP_LCOpenDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("STATUS")]
            public string BP_Status { get; set; }
            [DisplayName("BTB LC NO.")]
            public int BP_LCNo { get; set; }
            [DisplayName("EXP LC/CONTRACT")]
            public string BP_LCContract { get; set; }
            [DisplayName("UD/AMEND")]
            public string BP_UDAmend { get; set; }
            [DisplayName("REMARKS")]
            public string BP_Remarks { get; set; }
            [DisplayName("PREPARED BY")]
            public string BP_PrepaidBy { get; set; }
        }
    }

我的pendingController类属性是:

public IActionResult PendingUser1()
{
    var model = new Pending();
    model.BP_Item.ToList();
    return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult PendingUser1(Pending obj)
{
    _db.BTB_Pending.Add(obj);
    _db.SaveChanges();
    return RedirectToAction("Index");
}

我的pendinguser1视图是:

<div class="form-group">
    <label asp-for="BP_Item" class="control-label"></label>
    <select id="BP_Item" name="BP_Item" class="form-control form-control-sm">                                    
        <option value="1">POLYESTER STAPLE FIBER</option>
        <option value="2">MECHINARY(TSUDAKOMA</option>
        <option value="3">SIDE RECYCLING MACHINE</option>
        <option value="4">ZIPPER</option>
        <option value="5">QUILTING MACHINE</option>
        <option value="6">INDUSTRIAL SEWING MACHINE</option>                                   
    </select>
    <span asp-validation-for="BP_Item" class="text-danger"></span>
</div>

I am using a list for assigning the dropdown. But it shows this error:

System.InvalidOperationException: 'The entity type 'SelectListGroup' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'

How can I solve this error?

This is my code:

namespace ComSoft.Models
{
        public class Pending
        {
            [Key]
            public int Id { get; set; }
            [Required]
            [DisplayName("SUPPLIER NAME")]
            public string BP_SupplierName { get; set; }
            [DisplayName("COUNTRY")]
            public string BP_Country { get; set; }
            [DisplayName("ITEM")]
            //public string BP_Item { get; set; }
            //[Key]
            public List<SelectListItem> BP_Item { get; } = new List<SelectListItem>
            {
                new SelectListItem { Value = "1", Text = "POLYESTER STAPLE FIBER" },
                new SelectListItem { Value = "2", Text = "MECHINARY(TSUDAKOMA)" },
                new SelectListItem { Value = "3", Text = "SIDE RECYCLING MACHINE"  },
                new SelectListItem { Value = "4", Text = "QUILTING MACHINE"  },
                new SelectListItem { Value = "5", Text = "INDUSTRIAL SEWING MACHINE"  },
                new SelectListItem { Value = "6", Text = "SEWING MACHINE NEEDLE"  },
            };
            [DisplayName("VALUE")]
            public int BP_Value { get; set; }
            [DisplayName("P/I No.")]
            public char BP_PINo { get; set; }
            [DisplayName("ERP REMARKS")]
            public string BP_ERPRemarks { get; set; }
            [DisplayName("TRADE TERM")]
            public string BP_TradeTerm { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("SHIP. DATE")]
            public DateTime BP_ShipDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("PI RECEIVED DATE")]
            public DateTime BP_PIReceivedDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("BANK APPLIED DATE")]
            public DateTime BP_BankAppliedDate { get; set; }
            [DisplayName("BUYER")]
            public string BP_Buyer { get; set; }
            [DisplayName("STYLE")]
            public char BP_Style { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("L/C OPEN DATE")]
            public DateTime BP_LCOpenDate { get; set; }
            [DataType(DataType.Date)]
            [DisplayFormat(DataFormatString = "{dd-mm-yyyy}")]
            [DisplayName("STATUS")]
            public string BP_Status { get; set; }
            [DisplayName("BTB LC NO.")]
            public int BP_LCNo { get; set; }
            [DisplayName("EXP LC/CONTRACT")]
            public string BP_LCContract { get; set; }
            [DisplayName("UD/AMEND")]
            public string BP_UDAmend { get; set; }
            [DisplayName("REMARKS")]
            public string BP_Remarks { get; set; }
            [DisplayName("PREPARED BY")]
            public string BP_PrepaidBy { get; set; }
        }
    }

My PendingController Class property is:

public IActionResult PendingUser1()
{
    var model = new Pending();
    model.BP_Item.ToList();
    return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult PendingUser1(Pending obj)
{
    _db.BTB_Pending.Add(obj);
    _db.SaveChanges();
    return RedirectToAction("Index");
}

And my PendingUSer1 view is:

<div class="form-group">
    <label asp-for="BP_Item" class="control-label"></label>
    <select id="BP_Item" name="BP_Item" class="form-control form-control-sm">                                    
        <option value="1">POLYESTER STAPLE FIBER</option>
        <option value="2">MECHINARY(TSUDAKOMA</option>
        <option value="3">SIDE RECYCLING MACHINE</option>
        <option value="4">ZIPPER</option>
        <option value="5">QUILTING MACHINE</option>
        <option value="6">INDUSTRIAL SEWING MACHINE</option>                                   
    </select>
    <span asp-validation-for="BP_Item" class="text-danger"></span>
</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海风掠过北极光 2025-02-13 16:34:59

您可以使用[未绘制]用于未从数据库

[NotMapped]
public List<SelectListItem> BP_Item { get; } ...........

编辑映射的属性:
应在下拉中选择ASP-FOR选择数据。

<select asp-for="BP_Value" asp-items="Model.BP_Item">
        </select>

you can use [NotMapped] for properties you don't map from database

[NotMapped]
public List<SelectListItem> BP_Item { get; } ...........

edit:
should be selected data at asp-for in dropdown.

<select asp-for="BP_Value" asp-items="Model.BP_Item">
        </select>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文