从ASP.NET MVC应用程序内部的SQL视图检索数据

问题描述 投票:1回答:1

我已经阅读了与此问题相关的所有问题,找到了所有视频,但在任何一个问题中都找不到解决问题的方法。

我一直在尝试使用ASP.NET MVC框架从.cshtml页面中的SQL视图显示数据。

这是我控制器中的代码:

public ActionResult childinfo()
{
       var myQuery1 = db.WebChildCaretakerInfo.Where(s => s.CustSSN == Custssn).Select(s => new { FirstName = s.FirstName, age = s.age, program_name = s.program_name });

        return View(myQuery1);
} 

WebChildCaretakerInfo是我要从中获取数据的视图。

这是我的cshtml页面中的代码:

@model IEnumerable<WebProgProject.Models.WebChildCaretakerInfo>

@{Layout = null;}

@{ 
var childName = "";
var age = 0;
var caretakerName = "";
var caretakerEmail = "";
var caretakerPhone = "";
foreach (var item in Model)
{
    childName = @item.FirstName;
    age = (int)@item.age;
    caretakerName = @item.CaretakerName;
    caretakerEmail = @item.email;
    caretakerPhone = @item.phone_number;}
}

Note:我在代码后面的只读文本框中使用了ChildName和其他变量。

[当我尝试执行此页面时,我在浏览器中收到此错误:

传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery1[<>f__AnonymousType33 [System.String,System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [WebProgProject.Models.WebChildCaretakerInfo]']。

异常详细信息:System.InvalidOperationException:模型项传递给字典的类型为'System.Data.Entity.Infrastructure.DbQuery1[<>f__AnonymousType33 [System.String,System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1 [WebProgProject.Models.WebChildCaretakerInfo]']。

我尝试删除标题

@model IEnumerable<WebProgProject.Models.WebChildCaretakerInfo>

并且执行中,我得到了另一个错误:

对象在childName = @ item.FirstName中不包含名字的定义

当然是废话,因为它就在我的WebChildCaretakerInfo.cs文件中:

namespace WebProgProject.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    public partial class WebChildCaretakerInfo
    {
        public string FirstName { get; set; }
        public Nullable<int> age { get; set; }
        public string programCode { get; set; }
        public string CaretakerName { get; set; }
        public string email { get; set; }
        public string phone_number { get; set; }
        public string program_name { get; set; }
        public string SSN { get; set; }
        public string CustSSN { get; set; }
    }
}

是否存在与从SQL表中检索数据不同的从SQL视图中检索数据到ASP.NET MVC应用程序中的方法?因为在同一个应用程序中,我正在从表中检索数据,所以没有问题。

sql asp.net model-view-controller sql-view
1个回答
1
投票

您需要一个特定的类型:

@model IEnumerable<WebProgProject.Models.WebChildCaretakerInfo>

但是选择匿名类型:

.Select(s => new { FirstName = s.FirstName, age = s.age, program_name = s.program_name })

[基本上,匿名类型在这里不起作用。因为视图需要知道期望的类型。如果需要自定义类型,则可以创建视图模型,但是根据名称,听起来像您想要的类型正是从数据库中查询的类型。因此,只需删除.Select()子句:

var myQuery1 = db.WebChildCaretakerInfo.Where(s => s.CustSSN == Custssn);
return View(myQuery1);

这将返回枚举WebChildCaretakerInfo,这正是视图所期望的。

(注意,如果您确实创建了视图模型,则可能无法直接从数据库中选择它,因为创建视图模型可能不是LINQ to Entities可以转换为基础数据存储的东西。在这种情况下,您需要引入一个中间步骤,该步骤可能只是以.ToList()的形式出现,将结果具体化到内存中,然后从中转换为视图模型类型。)

© www.soinside.com 2019 - 2024. All rights reserved.