.Net Core - Передача идентификатора в частичное представление, частичное представление должно получить больше данных из идентификатора и показать результаты - PullRequest
0 голосов
/ 20 июня 2019

Мне бы хотелось, чтобы частичное представление получало больше данных на основе переданного сквозного значения: id

Вот так я передаю значение в частичное представление: @Html.Partial("_Customer", "123")

Из _Customer частичного представления я хотел бы получить доступ к созданному мной представлению sql-сервера

+-----+------+-----+
| Id  | Name | Age |
+-----+------+-----+
| 122 | Jim  | 35  |
+-----+------+-----+
| 123 | Elon | 47  |
+-----+------+-----+

, взять имя и возраст и отобразить его в полях ввода частичного представления.

Хотите знать, есть ли простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Компоненты представления аналогичны частичным представлениям, но они намного более мощные. Компоненты представления не используют привязку модели и зависят только от данных, предоставленных при обращении к ней.

См. Следующие шаги:

1.Создать класс CustomerDetailsViewComponent в папке ViewComponents, которая создается в корневом пути

    public class CustomerDetailsViewComponent:ViewComponent

    {

       private readonly MVCDbContext _context;

       public CustomerDetailsViewComponent(MVCDbContext context)
       {
          _context = context;
       }

       public async Task<IViewComponentResult> InvokeAsync(int customerId)
       {
          var model = await _context.Customer.FindAsync(customerId);
          return View(model);
       }
    }

2. Путь поиска компонента View: /Views/Shared/Components/CustomerDetails/Default.cshtml, именем представления по умолчанию для компонента представления является Default, что означает, что ваш файл представления будет обычно называться Default.cshtml. Вы можете указать другое имя представления при создании результата компонента представления или при вызове метода View.

@model TestProject.Models.Customer

<div class="row">
  <div class="col-md-4">
    <form asp-action="Edit">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" asp-for="Id" />

        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Age" class="control-label"></label>
            <input asp-for="Age" class="form-control" />
            <span asp-validation-for="Age" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </form>
  </div>
</div>

3.Чтобы использовать компонент представления, вызовите в представлении следующее:

@await Component.InvokeAsync("CustomerDetails", new { customerId= 123})

Для получения более подробной информации о компонентах просмотра, вы можете обратиться к официальной документации

1 голос
/ 20 июня 2019

Вы можете написать сервис и ввести его при частичном просмотре, например -

Сервис

public interface IUserInfo
    {
        User GetUserInforById(int id);
    }

    public class UserInfo : IUserInfo
    {
        private readonly MyDbContext _cotext;

        // Inject DbContext 
        public UserInfo(MyDbContext dbContext)
        {
            _cotext = dbContext;
        }
        public User GetUserInforById(int id)
        {
            return _cotext.Users.Single(i => i.Id == id);
        }
    }

Частичный просмотр

@inject SeedSample.Services.IUserInfo UserInfo

@{ 
    var information = UserInfo.GetUserInforById(Model.Id);
}

@*write your html code*@
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...