1

我有一个使用标准模型的视图,但现在我需要在页面上添加来自两个不同模型的信息。在做了一些研究来处理这个问题后,我创建了一个 ViewModel。现在我在尝试显示我的观点时遇到错误:

DataBinding:“VirtualAuthtech.ViewModels.CMSCalculatorViewModel”不包含名为“WORKCY”的属性。

这是我的视图模型

namespace VirtualAuthtech.ViewModels
{
    public class CMSCalculatorViewModel
    {
        public CPT CPT { get; set; }
        public GPCI GPCI { get; set; }
    }
}

CPT 是我最初使用的第一个模型,然后我需要添加 GPCI

这是我的观点的 ActionResult

public ActionResult _CMSCalculator()
        {
            string CPTCode = string.Empty;
            string MOD = string.Empty;
            string GPCIPayID = "31146";
            string GPCIYear = "2011";
            if (Request.Params["CPT1"] != null)
            {
                CPTCode = Request.Params["CPT1"];
                MOD = Request.Params["MOD"];
            }
            return PartialView("_CMSCalculatorPanel", (string.IsNullOrEmpty(CPTCode) ? null as CMSCalculatorViewModel : CPTDataHelper.GetCPTGPCI(CPTCode, MOD, GPCIPayID, GPCIYear)));
        }

这是从我的模型中获取数据的方法

    public static CMSCalculatorViewModel GetCPTGPCI(string CPTCode, string MOD, string GPCIPayID, string GPCIYear)
    {
        using (var DB = new VADataContext())
        {
            var view = new CMSCalculatorViewModel();
            if (String.IsNullOrWhiteSpace(MOD))
            {
                view.CPT = (from cpt in DB.CPTs
                            where cpt.CPT1 == CPTCode
                            select cpt).FirstOrDefault<CPT>();
                view.GPCI = (from gpci in DB.GPCIs
                             where gpci.PAYID == GPCIPayID && gpci.YEAR == GPCIYear
                             select gpci).FirstOrDefault<GPCI>();
            }
            else
            {
                view.CPT = (from cpt in DB.CPTs
                            where cpt.CPT1 == CPTCode && cpt.MOD == MOD
                            select cpt).FirstOrDefault<CPT>();
                view.GPCI = (from gpci in DB.GPCIs
                             where gpci.PAYID == GPCIPayID && gpci.YEAR == GPCIYear
                             select gpci).FirstOrDefault<GPCI>();
            }
            return view;
        }
    }

现在我的视图正在使用新的 ViewModel 并且我正在尝试显示一个字段:

<div style='float:left; width: 35px; margin: 0; padding: 0; text-align: center; color: #094ab2'>@VirtualAuthtech.CallbackPanelHelper.GetFieldNumber(Model, "WORKCY")</div>

我在这段代码中遇到错误:

public static double GetFieldNumber(object data, string fieldName)
        {
            object text = DataBinder.Eval(data, fieldName);
            if (text == null || text.ToString() == string.Empty)
                return 0;
            double number = Convert.ToDouble(text);
            return number;
        }

这是说我的模型不包含我正在寻找的字段的属性。我是否需要告诉它查看我的视图模型的 CPT 部分?

这是我创建的第一个 ViewModel,所以我可能会搞错这一切。任何帮助我朝着正确的方向前进将不胜感激!

4

2 回答 2

1

为什么调用 GetFieldNumber?以下行有什么问题:

<div style='float:left; width: 35px; margin: 0; padding: 0; text-align: center; color: #094ab2'>@Model.CPT.WORKCY</div>

但是,如果您必须使用运行时绑定,那么函数中的行可能应该是:

object text = DataBinder.Eval((CMSCalculatorViewModel)data.CPT, fieldName);
于 2012-10-05T19:44:55.260 回答
0

我能够使用此代码使其正常工作。

<div style='float:left; width: 35px; margin: 0; padding: 0; text-align: center; color: #094ab2'>@if(Model == null) { <text>0</text> } else { @VirtualAuthtech.CallbackPanelHelper.GetFieldNumber(Model.CPT, "WORKCY") }</div>

但是,我在这个视图中还有很多其他领域。我宁愿不必检查每个模型是否为空。如果您有其他解决方案,请分享。

于 2012-10-05T20:13:19.733 回答