0

asp.net mvc を使用して製品を実装したいと考えています。
私の製品はいくつかのモジュールに分割されており、jquery タブ ウィジェットを使用して、ユーザーを送信に誘導したいと考えています。
私の ProductController は、viewModel オブジェクトのリストを製品ビューに送信します。
したがって、私の製品ビューは次のようになります。

@model IList<View.Products.Modules.IModuleView>

<script type="text/javascript">
    $(document).ready(function () {
        $("#tabs").tabs({ ajaxOptions:
            {
                type: 'POST', 
                cache: false
            }
        });
    });
</script>

<div id="tabs">
    <ul>
        <li><a href="#fragment-1"><span>Tab1</span></a></li>
        <li><a href="#fragment-2"><span>Tab2</span></a></li>
        <li>@Html.ActionLink("Result","Result","Product")</li>
    </ul>
    <div id="fragment-1">
        @{
            var viewModelA = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelA)).First();
            var viewModelB = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelB)).First();
            var viewModelC = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelC)).First();
        }
        @Html.Partial("viewA", viewModelA)
        @Html.Partial("viewB", viewModelB)
        @Html.Partial("viewC", viewModelC)
    </div>
    <div id="fragment-2">
        Lorem ipsum dolor...
    </div>
</div>

ここまでは順調ですね。ユーザーが最後のタブをクリックすると、ProductController でアクション Result が呼び出されます。ここに私の質問があります: 部分ビューのすべてのフォーム情報を収集し、それをコントローラーに送り返し、viewModel を更新する最良の方法は何ですか?

ご提案ありがとうございます。

4

1 に答える 1

0

これが私の現在の解決策です:(
私のモジュールは1つのフォームを共有し、プレゼンターオブジェクトはセッションに保存されます)

jQuery:

    $('#tabs').bind('tabsselect', function (event, ui) {
        var formToSubmit = $('form:first');
        var jqxhr = $.post(formToSubmit.attr('action'), formToSubmit.serialize(),
            function ShowResult(data) {
                $("#fragment-2").html( data );
            }
        );
    });

コントローラー:

    [HttpPost]
    public ActionResult Result(FormCollection form) 
    {
        viewModelA = (ViewModelA)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelA)).First();
        viewModelB = (ViewModelB)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelB)).First();

        TryUpdateModel<ViewModelA>(viewModelA, form);
        TryUpdateModel<ViewModelB>(viewModelB, form);

        TransactionResult result = Presenter.CheckBusinessRules(true);

        if (result.IsDirty)
        {
            return Content( result.Message);
        }

        return PartialView();
    }
于 2011-05-17T14:55:23.777 に答える