Есть ли способ извлечь данные из другой таблицы или другой модели из выпадающего списка или из поля выбора? - PullRequest
0 голосов
/ 11 ноября 2019

Я использую Visual Studio 2019, приложение Blazor, приложение сервера Blazor, Asp.netCore 3.0.

В этом я использую 2 модели (отдел моделей и модель) и 2 разные базы данных (модель Gage)с отделом калибровки базы данных и отделом модели с базой данных Erp).

Я создал форму с помощью Model Gage и пытался получить данные из отдела моделей для окна выбора.

Модель Gage

 using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    namespace Calibration.Data.Gage
    {
        public partial class GageMaster
        {
            public long Id { get; set; }
            [Required]
            public string Department { get; set; }
            [Required]
            public string Section { get; set; }
            [Required]
            public string ControlNo { get; set; }

Для этого я использую CalibrationDbContext

Пример кода для GageService

 public Task<List<GageMaster>>
           GetGageAsync(string strCurrentUser)
        {
            List<GageMaster> NwDset =
                new List<GageMaster>();
            // Get Weather Forecasts  
            NwDset =
                (from Dset in _context.GageMaster                    
                 where Dset.IsObsolete != "Yes"               
                 select Dset).ToList();
            return Task.FromResult(NwDset);
        }

using System;
using System.Collections.Generic;

namespace Calibration.Data.ERP
{
    public partial class Department
    {
        public string Departmentcode { get; set; }
        public string Departmentname { get; set; }
        public string Office { get; set; }

    }

Для этогоЯ использую ERPDbContext

Пример кода для ErpService

public Task<List<Department>>
           GetDepartmentAsync()
        {
            List<Department> NwDset =
                new List<Department>();
            // Get Weather Forecasts  
            NwDset =
                (from Dset in _context.Department                      
                 where Dset.Office == "P"
                 //strCurrentUser
                 select Dset).ToList();
            return Task.FromResult(NwDset);
        }

Пример кода Razorcomponent

<p>
 <InputText id="Department" class="form-control"
placeholder="Department"
@bind-Value="NwDset.Department" />
<ValidationMessage For="@(() => NwDset.Department)" />                                         
 </p>


 <p>
  <label for="ControlNo">Control Number:</label>
<InputText id="ControlNo" class="form-control"
 placeholder="Control Number"
 @bind-Value="NwDset.ControlNo" />
<ValidationMessage For="@(() => NwDset.ControlNo)" />
</p>

Я хочу заменить Inputtext отдела на Inputselect, Есть ли в любом случаеполучить доступ к 2 услуги на сайте razorcomponent? Я пытался унаследовать обе модели @Inherits, не разрешая более одного класса.

У меня нет проблем с Gageservice.

Я пытаюсь вызвать это «GetDepartmentAsync» из ErpService, но на самом деле я незнать путь. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Вы можете напрямую использовать директиву @inject для внедрения GageService и ErpService следующим образом.

Зарегистрируйте GageService и ErpService в Startup.cs

services.AddTransient<GageService>();
services.AddTransient<ErpService>();

Razor component

@page "/Test"

@using BlazorApp1.Data.Gage
@using BlazorApp1.Data.ERP
@inject GageService gageService
@inject ErpService erpService

<EditForm Model="@NwDset">
<DataAnnotationsValidator />
<ValidationSummary />
<table border="0" cellpadding="20">
    <thead>
        <tr>
            <th>Department</th>
            <th>ControlNo</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in NwDset)
        {
            <tr>
                <td>
                    <p>
                        <label for="">Department:</label>
                        <InputSelect id="Department" class="form-control" placeholder="Department" @bind-Value="item.Department">
                            @foreach (var department in departments)
                                {
                                <option value="@department.Departmentname">
                                    @department.Departmentname
                                </option>
                                }
                        </InputSelect>
                        <ValidationMessage For="@(() => item.Department)" />
                    </p>
                </td>
                <td>
                    <p>
                        <label for="ControlNo">Control Number:</label>
                        <InputText id="ControlNo" class="form-control"
                                   placeholder="Control Number"
                                   @bind-Value="item.ControlNo" />
                        <ValidationMessage For="@(() => item.ControlNo)" />
                    </p>
                </td>
            </tr>
        }
    </tbody>
</table>

<button type="submit">Submit</button>

</EditForm>


@code {
List<GageMaster> NwDset;
List<Department> departments;

protected override async Task OnInitializedAsync()
{
    NwDset = await gageService.GetGageAsync();
    departments = await erpService.GetDepartmentAsync();
}

}

Результат:

enter image description here

0 голосов
/ 12 ноября 2019

Чтобы ввести службу, не используйте @inherits, вместо нее используйте @inject. Вы должны зарегистрировать свой сервис в ConfigureServices. См. Здесь .

Вы также можете легко добавить несколько зависимостей в компонент бритвы, используя выделенный код:

Компонент бритвы Component.razor:

@inherits ComponentModel

...

Класс ComponentModel.cs

public class ComponentModel: ComponentBase
{
    [Inject]
    protected ErpService  ErpService  { get; set; }
    [Inject]
    protected GageService GageService { get; set; }

Подробнее здесь. .

...