Получить данные из представления SQL внутри приложения ASP.NET MVC - PullRequest
1 голос
/ 22 декабря 2019

Я прочитал все вопросы, связанные с этим вопросом, все видео, которые я смог найти, и я не смог найти решение своей проблемы ни в одном из них.

Я пытался отобразить данныеиз представления SQL на странице .cshtml с использованием инфраструктуры ASP.NET MVC.

Это код моего контроллера:

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

Примечание : я использую ChildName и другие переменные в текстовых полях только для чтения далее в коде.

Когда я пытаюсь выполнить эту страницу, в браузере появляется эта ошибка:

Элемент модели, переданный в словарь, имеет тип 'System.Data.Entity.Infrastructure. DbQuery 1[<>f__AnonymousType3 3 [System.String, System.Nullable 1[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.Nullable 1[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>

и, выполнив, я получаю другую ошибку:

Объект не содержит определения для FirstName в 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 в приложение ASP.NET MVC, который отличается от извлечения данныхиз таблицы SQL? Потому что в том же приложении я получаю данные из таблиц, и это не проблема.

1 Ответ

1 голос
/ 22 декабря 2019

Вы ожидаете определенного типа:

@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(), которая материализует результаты в память, из которой вы затем конвертируете в тип модели представления.)

...