MVC LINQ to SQL de la Table de Jointure d'Affichage
Im ayant des problèmes d'affichage des enregistrements de mon point de vue lors du passage de viewdata à un contrôle utilisateur.
Ce n'est qu'apparente pour linq to sql objets où je suis en utilisant les jointures de table.
L'exception que je reçois est "Impossible de convertir l'objet de type '<>f__AnonymousType410[System.String,System.Int32,System.Nullable
1[System.DateTime],System.String,System.String,System.String,System.String,System.String,System.Nullable1[System.Single],System.Nullable
1[System.Double]]"pour le type d'Application.Modèles.table1."
J'ai cherché un correctif à ce problème, mais pas trop familier sur ce qui est mal pour moi à la recherche pour le bon sujet. Ce devrait être le travail dans la théorie et ce qui fonctionne pour une seule table de la récupération, mais quand j'ai ajouté une se joindre à eux, j'ai couru dans des problèmes. Je suis actuellement en utilisant une instruction foreach pour la requête par le biais de mes données via une simple déclaration de tableau. Toute aide serait grandement appréciée. Merci à l'avance.
Ma configuration actuelle est:
CViewDataUC.cs(ma classe afin de conserver viewdata et les connexions de données spécifiquement pour les contrôles utilisateur)
public void Info(ViewDataDictionary viewData, int id)
{
var dataContext = new testDataContext();
var info = from table1 in dataContext.table1
join table2 in dataContext.table2 on table1.type_id equals table2.type_id
join table3 in dataContext.table3 on table1.id equals table3.id
join table4 in dataContext.table4 on table1.id equals table4.id
where table1.id == id
select new
{
table1.column1,
table1.column2,
table1.column3,
table1.column4,
table1.column5,
table1.column6,
table1.column7,
table2.column1,
table3.column1,
table4.column1
};
viewData["vd_Info"] = info;
}
HomeController.cs(Contrôleur)
public ActionResult Information(int id)
{
ViewData["Title"] = "Information";
CViewDataUC o_info = new CViewDataUC();
o_info.Info(this.ViewData, id);
return View();
}
De l'Information.aspx(Vue)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true"
CodeBehind="Info.aspx.cs" Inherits="App.Views.Info" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<%Html.RenderPartial("~/Views/UserControls/Info.ascx", ViewData["vd_Info"]);%>
</asp:Content>
Info.ascx(Contrôle de l'Utilisateur)
<%foreach (table1 m in (IEnumerable)ViewData.Model)
{ %>
<div class="left">
<br />
<br />
<p id="medium">
Column 1
<br />
<%= Html.TextBox("column1", m.column1, new {@class = "textBox", @readonly = "readonly" })%>
Column 1
<br />
<%= Html.TextBox("column2", m.column2, new {@class = "textBox", @readonly = "readonly" })%>
<br />
Column 1
<br />
<%= Html.TextBox("column3", m.column3, new {@class = "textBox", @readonly = "readonly" })%>
</p>
</div>
<%}%>
Vous devez vous connecter pour publier un commentaire.
m
n'est pas de typetable1
. C'est un type anonyme (select new { ... }
dans CViewDataUC.cs).Vous devez créer une classe qui représente le type des objets de modèle que vous êtes de passage à partir du contrôleur de vue.
Grâce, qui a travaillé comme un charme. J'ai totalement négligé le problème, je suppose que c'est un lundi, c'est pourquoi :P. Mais pour les personnes qui s'exécutent dans le même problème et est encore nouveau pour MVC et LINQ to SQL, le problème est résolu facilement faire ces étapes:
Créer une classe CInformation.cs Ajouter des variables similaires à votre requête
public class CInformation
{
}
Dans votre requête
public void uc_VDGenInfoDC(ViewDataDictionary viewData, int id)
{
Dans votre Contrôle de l'Utilisateur ou de la vue
foreach (CInformation m (IEnumerable)ViewData.Modèle){
}
Merci, cela m'a beaucoup aidé!
Un petit commentaire, vous devez utiliser des crochets: