سؤال

أواجه مشكلات في عرض السجلات في طريقة العرض الخاصة بي عند تمرير بيانات العرض إلى عنصر تحكم المستخدم.هذا واضح فقط بالنسبة لكائنات linq إلى sql حيث أستخدم صلات الجدول.

الاستثناء الذي أتلقاه هو "غير قادر على إرسال كائن من النوع '<>f__AnonymousType410[System.String,System.Int32,System.Nullable1[System.DateTime]،System.String،System.String،System.String،System.String،System.String،System.Nullable1[System.Single],System.Nullable1[System.Double]]' لكتابة App.Models.table1."

لقد بحثت عن حل لهذه المشكلة ولكني لست على دراية بالخطأ هنا حتى أتمكن من البحث عن الموضوع الصحيح.يجب أن يعمل هذا من الناحية النظرية وهذا يعمل من أجل استرداد جدول واحد ولكن عندما أضفت صلة فيهم واجهت مشاكل.أستخدم حاليًا عبارة foreach للاستعلام عن بياناتي عبر إعلان جدول واحد.أي مساعدة سيكون موضع تقدير كبير.شكرا لك مقدما.

الإعداد الحالي الخاص بي هو:

CViewDataUC.cs(صفي يحتفظ ببيانات العرض واتصالات البيانات خصيصًا لعناصر تحكم المستخدم)

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(وحدة التحكم)

public ActionResult Information(int id)
        {
            ViewData["Title"] = "Information";


            CViewDataUC o_info = new CViewDataUC();

            o_info.Info(this.ViewData, id);


            return View();
        }

معلومات.aspx(عرض)

<%@ 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(التحكم بالمستخدم)

<%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>
<%}%>
هل كانت مفيدة؟

المحلول

foreach (table1 m in (IEnumerable)ViewData.Model)

وm ليس من نوع table1. وهو نوع مجهول (select new { ... } في CViewDataUC.cs).

ويجب عليك إنشاء فئة الذي يمثل نوع من نموذج الكائنات التي يتم تمريرها من وحدة تحكم لعرضها.

نصائح أخرى

شكرا، التي عملت مثل السحر.لقد تجاهلت المشكلة تمامًا، وأعتقد أنه يوم الاثنين لهذا السبب :P.ولكن بالنسبة للأشخاص الذين يواجهون نفس المشكلة وما زالوا جددًا على MVC وLINQ إلى SQL، يتم حل المشكلة بسهولة، قم بالخطوات التالية:

  1. قم بإنشاء فئة CInformation.cs قم بإضافة متغيرات مشابهة لاستعلامك

    cinformation الطبقة العامة {

    public CInformation() { }
    
    public string _column1{ get; set; }
    public string _column2{ get; set; }
    ...
    

    }

  2. في استفسارك

    public void uc_vdgeninfodc (viewDatadictionary ViewData ، int id) {

        var dataContext = new testDataContext();
    
        IQueryable<CInformation> 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.test_id == id
                   select new CInformation
                   {
                       _column1 = table1.column1.ToString(),
                       _column2 = table2.column1.ToString(),
                       ...
                   };         
    
        viewData["vd_Info"] = info;
    
    }
    
  3. في عنصر تحكم المستخدم أو العرض

    foreach (CInformation m in (IEnumerable)ViewData.Model){

     m.column1
     m.column2
     ...
    

    }

شكرا، وقد ساعد هذا لي الكثير!

وتعليق واحد صغير، لديك لاستخدام أقواس زاوية:

IQueryable<CInformation> info = from table1 in dataContext.table1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top