2

モデルが複数の部分ビューにまたがって表示されるフォームがあり、jQuery タブが使用されます。検証の概要ですべてのビューからのエラーが表示されないことを除いて、すべて正常に機能します。

ユーザーが最初のタブでエラーを取得し、2 番目のタブに移動すると、最後に使用したタブのエラーによって検証の概要が上書きされます。

jQuery タブを使用しなければ、うまく機能しています。

タブを使用して、検証の概要を部分ビュー/タブ間で共有するにはどうすればよいですか?

メイン ビュー:

@model Data

<script type="text/javascript">

    $(function () {
        $("#Tabs").tabs();
    });
</script>
<div id="Tabs">
    <ul>
        <li><a href="#tabs-Product">Product</a></li>
        <li><a href="#tabs-Filteration">Filteration</a></li>
    </ul>
    @using (Ajax.BeginForm(MVC.Products.Save(),
                           new AjaxOptions { HttpMethod = FormMethod.Post.ToString()}))
    {

        <div id="tabs-Product">
            @{ Html.RenderPartial(MVC.Products.Views.tabs._tabs_Product, Model);}
        </div>

        <div id="tabs-Filteration">
            @{ Html.RenderPartial(MVC.Products.Views.tabs._tabs_Filteration, Model);}
        </div>

        @Html.ValidationSummary(false)

     <input type="submit" value="Ok" />
    }
</div>
4

1 に答える 1

0

代わりに純粋な CSS タブを使用してください。JavaScript がなく、検証の概要に干渉しません。

CSS:

.tabs {
    position: relative;
    min-height: 570px; /* This part sucks */
    clear: both;
    margin: 25px 0;
}

.tab {
    float: left;
}

    .tab label {
        background: #eee;
        padding: 10px;
        border: 1px solid #ccc;
        margin-left: -1px;
        position: relative;
        left: 1px;
    }

    .tab [type=radio] {
        display: none;
    }

.content {
    position: absolute;
    top: 28px;
    left: 0;
    background: white;
    right: 0;
    bottom: 0;
    padding: 20px;
    border: 1px solid #ccc;
    overflow: hidden;
}

    .content > * {
        opacity: 0;
        -webkit-transform: translate3d(0, 0, 0);
        -webkit-transform: translateX(-100%);
        -moz-transform: translateX(-100%);
        -ms-transform: translateX(-100%);
        -o-transform: translateX(-100%);
        -webkit-transition: all 0.6s ease;
        -moz-transition: all 0.6s ease;
        -ms-transition: all 0.6s ease;
        -o-transition: all 0.6s ease;
    }

[type=radio]:checked ~ label {
    background: white;
    border-bottom: 1px solid white;
    z-index: 2;
}

    [type=radio]:checked ~ label ~ .content {
        z-index: 1;
    }

        [type=radio]:checked ~ label ~ .content > * {
            opacity: 1;
            -webkit-transform: translateX(0);
            -moz-transform: translateX(0);
            -ms-transform: translateX(0);
            -o-transform: translateX(0);
        }

意見:

@using (Ajax.BeginForm(MVC.Products.Save(),
                            new AjaxOptions
                                {
                                    HttpMethod = FormMethod.Post.ToString()
                                }))
{
    @Html.HiddenFor(s => s.Id)

    @Html.ValidationSummary(false)

    <div class="tabs">

        <div class="tab">
            <input type="radio" id="tab-1" name="tab-group-1" checked="">
            <label for="tab-1">Product</label>

            <div class="content">
                @{ Html.RenderPartial(MVC.WhiteLabelTool.Symbols.Views.tabs._tabs_Product, Model); }
            </div>
        </div>

        <div class="tab">
            <input type="radio" id="tab-2" name="tab-group-1">
            <label for="tab-2">Filteration</label>

            <div class="content">
                @{ Html.RenderPartial(MVC.WhiteLabelTool.Symbols.Views.tabs._tabs_Filteration, Model);}
            </div>
        </div>


    </div>
        <input type="submit" value="Ok" />
}
于 2013-06-10T04:08:07.677 に答える