视图中的多个表单和部分视图中的单个提交

时间:2016-09-21 08:44:23

标签: javascript asp.net-mvc

enter image description here

我有这样的网页,红色部分是部分视图,包括蓝色部分中选项卡式表单的操作。实际上,每个选项卡也是一个视图,CustomerDef视图通过这样的kendo ajax tabstrip tool来调用它们;

<input title="Save" type="button" value="Save" onclick="toolbarSaveAction();"  class="toolbarButton toolbarBtnMarginLeft" />

对于保存操作,我在根脚本文件中有一个通用的javascript方法 SaveRecord 。在局部视图上,对于onclick事件,我有一个方法toolbarSaveAction。在每个选项卡视图上,我通过放置通用SaveRecord方法来调用click事件。这就是它的样子;

PartialButtonView

function SaveRecord(action, controller, param, customData) {

    var form = $("[aria-expanded=true]").find("form");
    var validator = form.kendoValidator().data("kendoValidator");

    if (validator.validate()) {

        var data = form.serialize();

        $.ajax({
            url: '/' + controller + '/' + action,
            dataType: 'json',
            type: 'POST',
            data: data,
            success: function (response) {

                if (response !== null && !response.success) {

                    ..

                }
                else {
                         ..
                }

            },
            error: function (xhr, ajaxOptions, thrownError) {

                ..

            }
        });
    }
}

Root.js

<script>
        function toolbarSaveAction() {
            SaveRecord('CustomerInfo', 'Customer', ['customerId']);
        }
</script>

CustomerInfo查看

<script>
        function toolbarSaveAction() {
            SaveRecord('CustomerAddress', 'Customer', ['customerId']);
        }
</script>

CustomerAddress查看

{{1}}

这是我的问题,对于每个标签视图,我有一个toolbarSaveAction()方法用于保存点击事件。当CustomrDef页面的第一个请求仅加载第一个选项卡时,保存操作正常工作,但是如果我单击其他选项卡,页面上将加载多个视图,这意味着将有多个toolbarSaveAction()。因此,单击保存操作时,如何处理选择正确的方法?

1 个答案:

答案 0 :(得分:1)

嗨在dom中维护一个隐藏变量然后在kendo选项卡上选择将当前标签文本分配给该元素

<input type="hidden" name="hdnSelectedTab" id="hdnSelectedTab"/>

然后在javascript中

  $(document).ready(function() {
                function onSelect(e) {
                   $('#hdnSelectedTab').val($(e.item).find("> .k-link").text());
                }
         });

现在只有一个动作作为toolbarSaveAction

<script>
    function toolbarSaveAction(selectedTab) {
        SaveRecord('CustomerInfo', 'Customer', ['customerId'],selectedTab);
    }
</script>

并将按钮中的标签值作为

传递
<input title="Save" type="button" value="Save" onclick="toolbarSaveAction($('#hdnSelectedTab').val());"  class="toolbarButton toolbarBtnMarginLeft" />

然后最终进入

function SaveRecord(action, controller, param, customData,selectedTab) {
   switch(selectedTab) {
     case "Customer-Info":
                  //    Implementation    
                   break;
     case "Identity":
                  //Implementation    
                   break;
     default:
            //default Implementation    
      }

}