Связывание двух моделей в приложении Razor Pages / MVC asp - PullRequest
0 голосов
/ 28 мая 2020

Итак. Я работаю над веб-сайтом на основе Razor, который функционирует как бизнес-менеджер.

Я пытаюсь связать адрес с принтером на странице создания.

Модель принтера выглядит так: publi c class Printer {publi c int ID {get; устанавливать; }

    [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; }
}

Модель адреса выглядит следующим образом: publi c class Address {publi c int ID {get; устанавливать; }

    [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.cs html .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();
    }

Create.cs html:

<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>

Однако, когда я запускаю его через свою форму, никакое значение не отправляется в поле внешнего ключа в базе данных, даже если я явно выбрал один из своих адресов из раскрывающегося списка. Любая помощь в этом будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 мая 2020

Если вы хотите установить элемент как выбранный в вспомогательной функции тега select, вы можете сделать это, присвоив его значение свойству, заданному атрибутом asp-for.

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

1 Раскрытие информации - мне принадлежит сайт Learn Razor Pages

...