私の ASP MVC 3 サイトでは、ユーザーがドロップダウン ボックスSole Proprietor
から の値を選択するProducer Type
と、という名前のフィールドセット内のすべての値DSS Specific
が無効になり、ビューが再レンダリングされるときに表示されなくなります。
コードをステップ実行すると、ユーザーが をヒットした後save
、モデル オブジェクトがProducer Type
を正しく評価し、適切なフィールドを に設定し、ビューがレンダリングされているときに、オブジェクトのフィールドが実際に必要な場所にあるnull
ことがわかります。なれ。Model
null
ただし、ビューには、ヒットする前にフィールドにあった値が引き続き表示され、それらのフィールドの値を含む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
に、ビューに戻されるオブジェクトの値はnull
forCONCode
および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>
これは複雑なプロセスであることは承知しています。役立つと思われる情報が不足している場合はお知らせください。ありがとうございました!