【问题标题】:'object' does not contain a definition for 'rxDetail'“object”不包含“rxDetail”的定义
【发布时间】:2016-01-24 18:06:31
【问题描述】:

控制器代码

public ActionResult Index()
        {
            var data = (from pd in db.Prescription_Details join md in db.Medicine_Details 
                        on pd.Medicine_Id equals md.Medicine_Id 
                        select new MyPrescription {rxDetail=pd.Rx_Detail_Id , medicineName=md.Medicine_Name , dosageFrequency= pd.Dosage_Frequency}).ToList();  

            var prescs = db.Prescription_Details.Select(x => x.Prescription.Doctor_Details.Doctor_Name).Distinct().ToList();
            //entity
            ViewBag.prescriptions = prescs;
            ViewBag.dd = data;
            return View();
        }

Razor code 
 @foreach (var item in ViewBag.dd)
                                        {
                                            <tr>
                                                <td>@item.rxDetail</td>
                                                <td>@item.medicineName</td>
                                                <td>@item.dosageFrequency</td>
                                            </tr>
                                        }

除了创建新类 MyPrescriptions 之外,我还遇到了这个错误。还有其他方法可以继续吗?

【问题讨论】:

    标签: c# .net asp.net-mvc-4 model-view-controller


    【解决方案1】:

    您的MyPrescription 课程是内部的吗? Razor 视图被编译到一个单独的程序集中,因此无法访问内部类。

    尝试从 dynamic 变量访问不可访问类的属性会引发您得到的异常。

    【讨论】:

    • 没有 MyPrescription 类不是内部的
    • @Anish 在对另一个答案的评论中,您刚刚说公开课程很有帮助。这正是我在这里所建议的。
    • 哦,是的!我推断出别的东西,谢谢伙计!
    【解决方案2】:

    ViewBag 在内部将定义的属性值存储为对象。它实际上是由ExpandoObject 定义的动态类型,将数据存储为字典。一旦您将任何custom object 转换为object 类型,它就不会知道自定义对象的基础属性,除非您显式转换它。

    所以您需要做的就是在使用之前将其转换为您的自定义对象:

    @foreach(ViewBag.dd 中的变量项为 MyPrescription)

    @foreach (MyPrescription item in ViewBag.dd)
    

    【讨论】:

    • 如果它解决了您的问题,那么您可以接受它作为答案。它将帮助其他寻求类似问题的用户。
    • 实际上,我刚刚将 My Prescription 课程设置为 Public 并且它有效。我没有使用“as”关键字。
    • 这甚至不会编译...它在尝试枚举之前将ViewBag.dd 转换为MyPrescription。要转换@​​987654328@ 的每个元素,您应该使用@foreach (MyPrescription item in ViewBag.dd),除非MyPrescription 是公开的,否则它也不会编译。
    • @Jakub 很好!这个错误太天真了。
    猜你喜欢
    • 2014-09-09
    • 2018-03-30
    • 1970-01-01
    • 2021-11-29
    • 2018-05-28
    • 2020-12-31
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多