【问题标题】:Linking together two models in a Razor Pages/MVC asp application在 Razor Pages/MVC asp 应用程序中将两个模型链接在一起
【发布时间】:2020-09-15 21:17:04
【问题描述】:

所以。我正在开发一个基于 Razor 的网站,担任业务经理。

我正在尝试将地址链接到创建页面中的打印机。

打印机型号如下所示: 公共类打印机 { 公共 int ID { 获取;放; }

    [StringLength(50)]
    [Display(Name = "Machine ID")]
    public string MachineID { get; set; }

    [Display(Name = "Log ID")]
    public int Log_ID { get; set; }

    [Display(Name = "Lease ID")]
    public int Lease_ID { get; set; }

    [Display(Name = "Serial Number")]
    [StringLength(50)]
    public string Serial_Number { get; set; }

    [StringLength(10)]
    public string Solution { get; set; }

    [StringLength(50)]
    [Display(Name = "Additional Info")]
    public string Additional_Info { get; set; }

    [DataType(DataType.Date)]
    [Display(Name = "Installation Date")]
    public DateTime InstallationDate { get; set; }

    [Display(Name = "Mono Click")]
    public float Mono_Click { get; set; }

    [Display(Name = "Colour Click")]
    public float Colour_Click { get; set; }

    public int Minimum { get; set; }

    [Display(Name = "Parts Warranty")]
    public int Parts_Warranty { get; set; }

    [Display(Name = "IT Support")]
    public int IT_Support { get; set; }

    [StringLength(50)]
    [Display(Name = "Contract Type")]
    public string Contract_Type { get; set; }

    public Company_Site Site { get; set; }
    public Printer_Model Model { get; set; }
    public Address Previous_Address { get; set; }
}

地址模型如下所示: 公开课地址 { 公共 int ID { 获取;放; }

    [StringLength(50)]
    [Display(Name = "Address")]
    public string Address_1 { get; set; }

    [Display(Name = "Address")]
    [StringLength(50)]
    public string Address_2 { get; set; }

    [StringLength(50)]
    [Display(Name = "City")]
    public string Town_City { get; set; }

    [StringLength(50)]
    public string County { get; set; }

    [Display(Name = "Post Code")]
    [StringLength(10)]
    public string Post_Code { get; set; }
}

为了尝试将它们链接在一起,我在我的 Create.cshtml.cs 文件中有这个:

public List<SelectListItem> PrevAddress { get; set; }
public IActionResult OnGet()
   {
        PrevAddress = _context.Address.Select(a => new SelectListItem
        {
            Value = a.ID.ToString(),
            Text = a.Address_1 + " " + a.Town_City + " " + a.Post_Code 
        }).ToList();
        return Page();
    }

创建.cshtml:

<div class="form-group">
                <label asp-for="Printer.Previous_Address.ID" class="control-label"></label>
                <select asp-for="Printer.Previous_Address.ID" name="PrevAddress" asp-items="Model.PrevAddress" class="form-control"><option value=""></option></select>
                <span asp-validation-for="Printer.Previous_Address.ID" class="text-danger"></span>
            </div>

但是,当我通过我的表单运行它时,即使我从下拉框中明确选择了我的地址之一,也不会将值发送到数据库中的外键字段。对此的任何帮助将不胜感激。

【问题讨论】:

    标签: asp.net asp.net-mvc razor-pages


    【解决方案1】:

    如果您想在选择标签助手中将项目设置为选中,您可以通过将其值分配给asp-for 属性指定的属性来实现。

    https://www.learnrazorpages.com/razor-pages/forms/select-lists#setting-selected-items1

    1披露 - 我拥有 Learn Razor Pages 网站

    【讨论】:

    • 我已按照您提供的步骤进行操作,但现在不是不设置外键值(链接两个对象),而是给我以下 SQL 错误:SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Printer_Printer_Model_ModelID". The conflict occurred in database "_360_Office_ManagementContext-577009b7-1da0-4f2f-8dbc-3196d6e7a3d9", table "dbo.Printer_Model", column 'ID'. The statement has been terminated. 请给我一些建议?
    • 原来的问题已经解决了?如果是这样,您应该接受一个答案,然后在您的应用程序的其他地方发布一个关于问题的新问题。我认为版主不会对 cme​​ts 部分的扩展调试帮助感到满意。
    • 与此同时,如果外键值尚未设置为相关表中的现有 PK 值,您通常会收到该消息 - 通常根本没有设置。您应该调试您的应用程序以查看模型绑定器为 FK 分配的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多