1

標準モデルを使用していたビューがありますが、ページ上の 2 つの異なるモデルからの情報を追加する必要があります。これを処理するためにいくつかの調査を行った後、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>

ただし、このビューには他にも多くのフィールドがあります。それらのすべてでモデルがnullかどうかを確認する必要はありません。別の解決策がある場合は、共有してください。

于 2012-10-05T20:13:19.733 に答える