0

Controller と View の間で ViewBag 変数を渡していますが、常に同じ値の false を持っています。デバッグ中に上書きされていないことを確認しました。

その目的は、特定の条件下で、ViewBag アイテムが true に設定されている場合に、View に追加のマークアップを表示することです。データがビューに送り返される直前に true に設定されますが、ビューでのデバッグ中に false と表示されます。そのため、必要な追加のマークアップが表示されません。

ViewBag アイテムで間違っていることは何ですか?

ビューからの適切なマークアップは次のとおりです。

if (ViewBag.Refresh == true)
                            {
                                <tr>
                                    <td colspan="5">
                                        <b>@Html.Label("lbl_Templates", "Templates:")</b>
                                    </td>
                                </tr>
                                <tr>
                                    @foreach (var item in Model.Templates)
                                    {
                                        <td>
                                            @Html.CheckBoxFor(model => Convert.ToBoolean(item.IsChecked));
                                            @Html.LabelFor(model => item.TemplateName)
                                        </td>
                                    }
                                </tr>
                                <tr>
                                    <td colspan="5">
                                        <b>@Html.Label("lbl_Guarantor", "Guarantor(s):")</b>
                                    </td>
                                </tr>
                                <tr>
                                    @foreach (var item in Model.Guarantors)
                                    {
                                        <td>
                                            @Html.CheckBoxFor(model => Convert.ToBoolean(item.isChecked));
                                            @Html.LabelFor(model => item.GuarantorFirstName + " " + item.GuarantorLastName)
                                        </td>
                                    }
                                </tr>
                            }

コントローラーの Index メソッドでは、最初は false に設定されています。

public ActionResult Index()
        {
            ViewBag.Refresh = false;
            ViewBag.Error = "";
            return View();
        }

これがコントローラーメソッドです。「else」ロジックに該当することに注意してください。ビューに戻るとすぐに (return Json ステートメントを介して):

[HttpPost]
        public ActionResult Refresh(string loanID, string loanType, string selectedVal)
        {
            try
            {
                bool dbHasRows = db.ChkLoanFields(Convert.ToInt32(loanID));

                if (!dbHasRows)
                {
                    ViewBag.Refresh = false;
                    ViewBag.Error = "Details not available for this LoanId";
                    return Json(new { success = false });
                }
                else
                {
                    ViewBag.Refresh = true;
                    bool tmplst = true;
                    bool gurlst = true;

                    ViewModelTemplate_Guarantors tg = db.SelectViewModelTemplate_Guarantors(Convert.ToInt32(loanID), loanType, selectedVal);

                    if (tg.Templates.Count() == 0)
                    {
                        tmplst = false;
                        ViewBag.Error = "Templates not available for this LoanType";
                    }

                    if (tg.Guarantors.Count() == 0)
                    {
                        gurlst = false;
                        ViewBag.Error = "Guarantors not available for this LoanId";
                    }

                    return Json(new { success = true, templist = tmplst, guarlist = gurlst });
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
4

0 に答える 0