.Net Core-将ID传递给部分视图,部分视图需要从ID中获取更多数据并显示结果

时间:2019-06-19 21:30:17

标签: asp.net-core razor entity-framework-core

我希望部分视图基于传递的值id

来获取更多数据

这是将值传递给部分视图的方式: @Html.Partial("_Customer", "123")

_Customer局部视图中,我希望它访问我创建的sql server视图

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

抓住名称和年龄,并将其显示在部分视图输入框中。

想知道是否有简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以编写服务并在局部视图中注入,例如-

服务

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

答案 1 :(得分:1)

视图组件类似于部分视图,但功能更强大。视图组件不使用模型绑定,而仅依赖于调用模型时提供的数据。

请参阅以下步骤:

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

有关View组件的更多详细信息,您可以参考此official documentation