我已经阅读了与此问题相关的所有问题,找到了所有视频,但在任何一个问题中都找不到解决问题的方法。
我一直在尝试使用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.DbQuery
1[<>f__AnonymousType3
3 [System.String,System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [WebProgProject.Models.WebChildCaretakerInfo]']。异常详细信息:System.InvalidOperationException:模型项传递给字典的类型为'System.Data.Entity.Infrastructure.DbQuery
1[<>f__AnonymousType3
3 [System.String,System.Nullable1[System.Int32],System.String]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [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应用程序中的方法?因为在同一个应用程序中,我正在从表中检索数据,所以没有问题。
您需要一个特定的类型:
@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()
的形式出现,将结果具体化到内存中,然后从中转换为视图模型类型。)