【问题标题】:Access localdb data in a view在视图中访问 localdb 数据
【发布时间】:2021-01-22 18:25:28
【问题描述】:

我现在正在启动一个 ASP.NET 核心 mvc 项目,但在特定视图中显示信息时遇到问题。

我有 2 个模型包含它们的特殊性,我需要在 HomeController 中声明的视图中访问这两个模型。这是其中一种模型:

public class Tipo_Logradouro
    {
        public int Id  { get; set; }
        public string Abreviatura { get; set; }
        public string Nome_Tipo { get; set; }
    }

我的意图是通过一个已注册所有数据的 cshtml 表来呈现“Abreviatura”和“Nome_Tipo”。但是当我尝试时它给出了一个实例错误,我无法呈现它。该模型的控制器方法是通过脚手架制作的。

我不知道是否可以这样做,或者它是否非常简单,但我正在开始并且我想解决这种情况。

PS:我试图呈现信息的 cshtml 超出了它的范围。

【问题讨论】:

    标签: asp.net asp.net-mvc visual-studio asp.net-core localdb


    【解决方案1】:

    我有 2 个包含其特异性的模型,我需要 在 HomeController 中声明的视图中访问两者。

    虽然视图只能接受一种类型的模型,但您可以有多种方法在同一个视图中显示多个不同的模型数据。

    第一种方式:

    您可以将两个需要展示数据的模型组合成一个新模型,然后在视图中接收到新模型来展示不同模型的数据。

    public class Tipo_Logradouro
        {
            public int Id  { get; set; }
            public string Abreviatura { get; set; }
            public string Nome_Tipo { get; set; }
        }
    

    另一个模型:

       public class Person
        {
            public int Id { get; set; }
            public string Name{ get; set; } 
        }
    

    组合新模型:

    public class CombineModel
        {
            public List<Tipo_Logradouro> Tipo_Logradouros { get; set; }
            public List<Person> Persons { get; set; }
        }
    

    控制器:

    public IActionResult ShowData()
            { 
                CombineModel combineModel = new CombineModel()
                {
                    Persons = _context.Person.ToList(),
                    Tipo_Logradouros = _context.Tipo_Logradouro.ToList()
                };
                return View(combineModel);
            }
    

    查看:

    @model CombineModel
    @{
        ViewData["Title"] = "ShowData";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h1>ShowData</h1>
    
    <table class="table table-bordered">
        <tr>
            <td>Id</td>
            <td>Name</td>
        </tr>
        @foreach (var item in (IEnumerable<Person>)Model.Persons)
        {
            <tr>
                <td>@item.Id</td>
                <td>@item.name</td>
            </tr>
        }
    </table>
    <br />
    <br />
    <table class="table table-bordered">
        <tr>
            <td>Id</td>
            <td>Abreviatura</td>
            <td>Nome_Tipo</td>
        </tr>
        @foreach (var item in (IEnumerable<Tipo_Logradouro>)Model.Tipo_Logradouros)
        {
            <tr>
                <td>@item.Id</td>
                <td>@item.Abreviatura</td>
                <td>@item.Nome_Tipo</td>
            </tr>
        }
    </table>
    

    第二种方式:

    您可以使用 ViewData 传递另一个模型来查看:

    控制器:

     public IActionResult ShowData()
            {
                List<Tipo_Logradouro> data = _context.Tipo_Logradouro.ToList();
                ViewData["data"] = data;
                List<Person> persons= _context.Person.ToList();
                return View(persons);
            }
    

    查看:

    @model IEnumerable<Person>
    @{
        ViewData["Title"] = "ShowData";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h1>ShowData</h1>
    
    <table class="table table-bordered">
        <tr>
            <td>Id</td>
            <td>Name</td>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.Id</td>
                <td>@item.name</td>
            </tr>
        }
    </table>
    <br /><br />
    <table  class="table table-bordered">
        <tr>
            <td>Id</td>
            <td>Abreviatura</td>
            <td>Nome_Tipo</td>
        </tr>
        @foreach (var item in (IEnumerable<Tipo_Logradouro>)ViewData["data"])
        {
            <tr>
                <td>@item.Id</td>
                <td>@item.Abreviatura</td>
                <td>@item.Nome_Tipo</td>
            </tr>
        }
    </table>
    

    这是测试结果:

    【讨论】:

      【解决方案2】:

      您需要遍历 Tipo_Logadouro 对象的列表,并在循环中读取 Abreviatura 和 Nome_Tipo 属性的值。

      当您调试时,您是否从数据库中获取数据?还是您使用的是内存数据库?

      【讨论】:

      • 我使用的是localdb,但我能够解决这种情况,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多