1

私の ASP MVC 3 サイトでは、ユーザーがドロップダウン ボックスSole Proprietorから の値を選択するProducer Typeと、という名前のフィールドセット内のすべての値DSS Specificが無効になり、ビューが再レンダリングされるときに表示されなくなります。

コードをステップ実行すると、ユーザーが をヒットした後save、モデル オブジェクトがProducer Typeを正しく評価し、適切なフィールドを に設定し、ビューがレンダリングされているときに、オブジェクトのフィールドが実際に必要な場所にあるnullことがわかります。なれ。Modelnull

ただし、ビューには、ヒットする前にフィールドにあった値が引き続き表示され、それらのフィールドの値を含むsaveオブジェクトが渡されても表示さnullれます。また、ページが単にブラウザにキャッシュされていないことを確認するために、何十回も更新を押しました。

コントローラ

モデル オブジェクトが最初にコントローラーに戻されると、呼び出されたメソッドによって実行されます。ReformatFields

    [HttpPost]
    public ActionResult Edit(Monet.Models.AgentTransmission agenttransmission)
    {
        //redirect if security is not met.  
        if (!Security.IsModifier(User)) return RedirectToAction("Message", "Home", new { id = 1 });

        //Tax Id security
        ViewBag.FullSSN = Security.IsFullSsn(User);

        try
        {
            agenttransmission = AgentTransmissionValidator.ReformatFields(agenttransmission);

ReformatFieldsこれは、特定のフィールドを無効にするかどうかを決定するコードです。次に、モデル オブジェクトがagenttransmissionコントローラー内の上記のオブジェクトに割り当てられます。

        //TODO:  blank out DSS specific fields if not a sole proprietor!
        if (!agt.ProducerType.Equals("S") || !agt.DRMrole.Equals("Sole Proprietor"))
        {
            agt.C8CharAgentCAB0State = null;
            agt.C8CharAgentCAB0MktDiv = null;
            agt.CONCode = null;
            agt.BundleCode = null;
            agt.LifeRegion = null;
            agt.LifeField = null;
            agt.AGYMGMT = null;
            agt.INDSGC = null;
            agt.PENSGC = null;
            agt.GRPSGC = null;
            agt.LMKSGC = null;
            agt.LDT = null;
            agt.GCASBNS = null;
            agt.GCOMMSN = null;
            agt.GPROFBN = null;
            agt.INDSplits = null;
            agt.DSTSGC = null;
            agt.ANNCommCode = null;
            agt.LifeEAPercent = null;
            agt.VARPercent = null;
            agt.OwnerMaster = null;
            agt.LifeMaster = null;
            agt.CampaignMaster = null;
            agt.RelationshipEffDate = null;
            agt.RelationshipDistCode = null;
        }
        return agt;
    }

保存後、agenttransmissionモデル オブジェクトはビューに戻されます。

                db.SaveChanges();
                DisplayPrep();
                agenttransmission.displayChannel = getDisplayChannel(agenttransmission);
                agenttransmission.FormattedReferenceNumber =
                    ReferenceConversion.UnobAndFormat(agenttransmission.ReferenceNumber, "S");
                return View(agenttransmission);
            }

見る

以下のスクリーン ショットからわかるようModelに、ビューに戻されるオブジェクトの値はnullforCONCodeおよびBundleCodeです。

ここに画像の説明を入力

ただし、ページは以前と同じ値でレンダリングされます。

ここに画像の説明を入力

ここでわかるように、値をキャッシュするページの問題ではありません.HTMLは実際にこれらの値でレンダリングされています.

ここに画像の説明を入力

これら2つのフィールドのビューからの実際のコードは次のとおりです

    <div class="M-editor-label">
        @Html.LabelFor(model => model.CONCode)
    </div>
    <div class="M-editor-field">
        @Html.TextBoxFor(model => model.CONCode, new { maxlength = 2 })
        @Html.ValidationMessageFor(model => model.CONCode)
    </div>

    <div class="M-editor-label">
        @Html.LabelFor(model => model.BundleCode)
    </div>
    <div class="M-editor-field">
        @Html.TextBoxFor(model => model.BundleCode, new { maxlength = 6 })
    </div>

これは複雑なプロセスであることは承知しています。役立つと思われる情報が不足している場合はお知らせください。ありがとうございました!

4

1 に答える 1

3

POST を実行すると、そのすべてのデータが に保存されますModelState。モデルのプロパティを null に設定してから、ビューでそのモデルを返しても、ビューでそれらが空白になることはありませんModelState。GET アクションにリダイレクトして別の方法でこのデータを永続化するか、ModelState をクリアすることができます。

ModelState.Clear();

などの Html ヘルパー@Html.TextBoxForは、モデル クラスから直接ではなく、ModelState からデータを取得します。そのため、値を null に設定しても値が表示されます。

于 2013-06-11T19:51:21.513 に答える