2

IF 条件に応じてページに特定の HTML を表示しようとしています。ページのステータスと表示する内容を決定する静的変数があります。問題は、最初のページの読み込み後に HTML がレンダリングされないことです。

これは私の if の1つです:

   @if (WhiteLabel.Controllers.GlobalVariables.Step == 2)
            {
                <text>
            <div id="thirdDiv" data-step="3" class="no-show">
                <div class="span6">

次のようなグローバル変数の値を変更するボタンがあります。

<form  action="UploadPhoto/setNext" method="post">
                                <button class="btn" type="submit">siguiente</button>
                            </form>

そして、このコントローラーのメソッドに移動します:

public ActionResult setNext()
        {
            if (GlobalVariables.Step < 3)
            {
                GlobalVariables.Step  += 1;
            }
            else
            {
                RedirectToAction("AdjustDots", "VirtualTesterController");
            }
            return View("Load");
        }

完全なコードを更新:

    @if (WhiteLabel.Controllers.GlobalVariables.Step == 1)
    {
   <div id="firstDiv" data-step="1" >
        <!-- SUBIR FOTO -->
        <div class="row-fluid">
            <div class="span3">
                <div class="md-your-data">
                    <div class="hd">
                    <h2>1. @ViewBag.Strings["completarDatos"]</h2>
                    </div>
                    <div class="bd">
                        <ul>
                            <li>
                                <div class='selectBox'>
                                <span class='selected' id="ageSelected">@ViewBag.Strings["rangoEdad"]</span>
                                    <span class='selectArrow'></span>
                                    <div class="selectOptions">
                                        <span class="selectOption" value="Option 1">Option 1</span>
                                        <span class="selectOption" value="Option 2">Option 2</span>
                                        <span class="selectOption" value="Option 3">Option 3</span>
                                    </div>
                                </div>
                            </li>
                            <li>
                                <div class='selectBox'>
                                <span class='selected' id="skinToneSelected">@ViewBag.Strings["tonoPiel"]</span>
                                    <span class='selectArrow'></span>
                                    <div class="selectOptions">
                                        <span class="selectOption" value="Option 1">Option 1</span>
                                        <span class="selectOption" value="Option 2">Option 2</span>
                                        <span class="selectOption" value="Option 3">Option 3</span>
                                    </div>
                                </div>
                            </li>
                            <li>
                                <div class='selectBox'>
                                <span class='selected' id="skinTypeSelected">@ViewBag.Strings["tipoPiel"]</span>
                                    <span class='selectArrow'></span>
                                    <div class="selectOptions">
                                        <span class="selectOption" value="Option 1">Option 1</span>
                                        <span class="selectOption" value="Option 2">Option 2</span>
                                        <span class="selectOption" value="Option 3">Option 3</span>
                                    </div>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div class="ft">
                    </div>
                </div>
            </div>

            <div class="span3">
                <div class="md-upload-photo">
                    <div class="hd">
                    <h2>2. @ViewBag.Strings["SubiTuFoto"]</h2>
                    </div>
                    <div id="pictureDiv" class="bd">
                        <div id="dropPicture" class="photo-cont no-photo" ondragover="allowDrop(event)" ondrop="onDrop(event)">
                            <div id="picDiv"></div>
                        </div>

                    </div>
                    <div class="ft">
                        <div class="file-input-wrapper">
                            <button class="btn-file-input">@ViewBag.Strings["subir"]</button>
                            <input id='file' class="btn-file" type='file' accept="image/*" onchange="manageFilePicker(event)" />
                        </div>

                        @using (Html.BeginForm("setNext", "UploadPicture"))
                        {
                             <button class="btn"  type="submit">Siguiente</button>
                        }

                    </div>
                </div>
            </div>

            <div class="span6">
                <div class="md-model-photo">
                    <div class="hd">
                    <h2>@ViewBag.Strings["Elegirfotodemodelo"] </h2>
                    </div>
                    <div class="bd">
                        <ul id="modelsList">
                            <li>
                                <img src="~/Content/images/imagen-modelo-upload.png" alt="" />
                            </li>
                            <li>
                                <img src="~/Content/images/imagen-modelo-upload.png" />
                                <img src="~/Content/images/imagen-modelo-upload.png" alt="" />
                            </li>
                            <li>
                                <img src="~/Content/images/imagen-modelo-upload.png" alt="" />
                            </li>
                            <li>
                                <img src="~/Content/images/imagen-modelo-upload.png" alt="" />
                            </li>
                        </ul>
                    </div>
                    <div class="ft">
                    </div>
                </div>
            </div>

        </div>
        <!-- END SUBIR FOTO -->
       </div>
    }


      @if (WhiteLabel.Controllers.GlobalVariables.Step > 2)
    {
    <div class="row-fluid">
        <!-- BEGIN MANAGE PHOTO -->

        <div id="secondDiv" data-step="2" class="no-show">
            <div class="span6">
                <div class="md-adjust-photo-img">
                    <div class="bd">
                        <div class="img-cont">
                            <img src="~/Content/images/img-modelo.png" alt="" />
                        </div>
                    </div>
                </div>
            </div>
             @if (WhiteLabel.Controllers.GlobalVariables.Step == 2)
             {
            <div id="thirdDiv" data-step="3" class="no-show">
                <div class="span6">
                    <div class="md-adjust-photo-data step-1">
                        <div class="hd">
                        <h3>4. @ViewBag.Strings["encuadrarFoto"]</h3>
                        <p>@ViewBag.Strings["encuadrarFotoDesc"]</p>
                        </div>
                        <div class="bd">
                        </div>
                        <div class="ft">
                            @using (Html.BeginForm("setPrevious", "UploadPicture"))
                            {
                                <button class="btn" type="submit">Atras</button>
                            }
                            @using (Html.BeginForm("setNext", "UploadPicture"))
                            {
                                <button class="btn" type="submit">Siguiente</button>
                            }
                        </div>
                    </div>
                </div>
            </div>
             }
             @if (WhiteLabel.Controllers.GlobalVariables.Step == 3)
             {
            <div id="fourthDiv" data-step="4" class="no-show">
                <div class="span6">
                    <div class="md-adjust-photo-data step-2">
                        <div class="hd">
                <h3>5. @ViewBag.Strings["brilloYcontraste"]</h3>
                <p>@ViewBag.Strings["brilloYcontrasteDesc"]</p>
                        </div>
                        <div class="bd">
                            <div class="col">
                    <span>@ViewBag.Strings["brightness"]</span>
                                <div class="tone-bar">
                                    <span></span>
                                </div>
                            </div>
                            <div class="col">
                    <span>@ViewBag.Strings["contrast"]</span>
                                <div class="tone-bar">
                                    <span></span>
                                </div>
                            </div>
                        </div>
                        <div class="ft">
                            @using (Html.BeginForm("setPrevious", "UploadPicture"))
                            {
                                <button class="btn" type="submit">Atras</button>
                        }
                            @using (Html.BeginForm("setNext", "UploadPicture"))
                            {
                                <button class="btn" type="submit">Siguiente</button>
                        }
                        </div>
                    </div>
                </div>
            </div>
             }
        </div>
    </div>

    }
4

2 に答える 2

2

まず、選択的なHTMLに部分ビューを使用することをお勧めします。これにより、コードがクリーンアップされます。それが私がここであなたのためにしたことだと想像してください、これはあなたに純粋に論理を与えます

@if (WhiteLabel.Controllers.GlobalVariables.Step == 1)
{
    @Html.RenderPartial("Step1")
}

@if (WhiteLabel.Controllers.GlobalVariables.Step > 2)
{
    // some default HTML here
    @if (WhiteLabel.Controllers.GlobalVariables.Step == 2)
    {
        @Html.RenderPartial("Step2")
    }
    @if (WhiteLabel.Controllers.GlobalVariables.Step == 3)
    {
        @Html.RenderPartial("Step3")
    }
}

したがって、これを純粋に論理的な POV から見ると、出力がないためには であるStep必要があります> 3。変数を使用している場合、競合状態staticと呼ばれるものがあるため、それが発生する可能性はもっともらしいです。2 つのスレッド (つまり 2 つのセッション) が次のページに進もうとすると、両方ともインクリメントを試みます- 競合状態が発生する場所はStep

// Assume 'Step' is 2 here
// Session A checks first, then Session B - both checks pass
if (GlobalVariables.Step < 3)
{
    // Session A increments first, then Session B
    GlobalVariables.Step += 1; // value is now 4
}

その上、アプリケーションはセッションに依存しません。つまり、1 人のユーザーがステップ 3 にいる場合、他のすべてのユーザーもそうです!

Stepプロパティを users に保存することをお勧めしますSession

于 2013-09-30T14:34:19.777 に答える
-1

これはうまくいきません。ポストバックごとにコントローラーが再構築されるため、変数は持続しません。いくつかのオプションがありますが、これが最善だと思います。値を保存して、Sessionポストバック中に取得できるようにしそのユーザーのセッションに固有のものにします。

したがって、コントローラーでは、次のようにすることができます。

var step = Session["step"] == null ? 1 : (int)Session["step"];
step++;
this.ViewBag.Step = step;
Session["step"] = step;

ビューで、静的プロパティをチェックする代わりに、以下を活用しViewBagます。

(int)ViewBag.Step == 1

例えば。実際、これは であるためdynamic、次のようにキャストする必要さえありません。

ViewBag.Step == 1

または多分:

ViewBag.Step < 3
于 2013-09-30T14:08:11.403 に答える