1

我试图让一个页面呈现一个 mvc 下拉列表并在下拉列表中的值更改时呈现部分视图。在我单击局部视图中的按钮以保留在局部视图中所做的更改之前,它工作正常。

我的部分视图有以下代码 -

<script type="text/javascript">
    $(function () {
        $("#sortable, #sortable2").sortable({
            connectWith:  ".connectedSortable"
        }).disableSelection();        
    });

    $(function () {
        $("button").button();
        $(".submit").click(function () {
            var list = "somedata";
            var companyid = $("#myid").text();            
            $.ajax({
                url: "/Controller/Action",
                data: {
                    'values': list,
                    'id': myid
                }
            });
        });
    });

</script>

......

<div class="submit">
    <button>Submit</button>
</div>

这是我的主要视图的代码 -

<script type="text/javascript">
    function processList() {
        var myid = $("#ddList").val();
        $.ajax({
            url: 'Controller/Action/',
            data: {
                'id': myid 
            },
            datatype: 'html',
            success: function (result) { success(result); }            
        });
    }

    function success(result) {
        $("#partial").html(result);
    }
</script>

@using (Html.BeginForm("Action", "Controller"))
{      
    @Html.DropDownListFor(x => x.SelectedValue, Model.MyEntity, new { @id = "ddList", onchange = "processList();" })


<div id="partial" style="height:  90%">

        @Html.Partial("_MyPartialView")

</div>
}

我的控制器的代码如下 -

public ActionResult Action(int? id)
        {                        
            id = id ?? 1;    

            var vm = new MyViewModel
            {
                .....
            };
            return PartialView("_MyPartialView", vm);
        }

        public ActionResult PersistActivities(int myid, string values)
        {
            int result = _service.UpdateActivityOrderByCompany(companyid, values);                         
            return new EmptyResult();            
        }

当我单击持久按钮时,我希望页面仅重新呈现部分视图。即使它什么也没做,那也没关系。实际发生的是控制器再次进入“Action”动作,然后引发渲染错误。如果我继续处理 jquery 错误,则只有部分视图数据会呈现在整个窗口中。

谁能指出我的渲染/控制器调用问题出在哪里?

我希望这是足够的信息。我不得不削减代码,但如有必要可以提供更多。

感谢您的任何想法。

EDTI -

我得到的错误是在用于呈现可排序列表的第一个函数的部分视图中 -

Microsoft JScript 运行时错误:预期对象

希望有帮助

4

1 回答 1

0

有很多事情可能是正在发生的事情的原因。

您的网址可能不正确。

url: 'Controller/Action/',

应该:

url: '@Url.Action("Action", "Controller")', 

您的按钮提交代码是指您ActionController,但您可能希望它转到您的PersistActivities. 此外,您的控制器操作需要变量myidand values,但您正在发送idand values instead。您还指的是 html 元素 myid,但此处未显示,我假设您为简洁起见将其省略了。也没有成功功能-您打算让该按钮实际做什么?

你可能想要的是这样的:

 $(".submit").click(function () {
     var list = "somedata";
     var myid = 1;
     alert(myid);
     $.ajax({
        url: '@Url.Action("PersistActivities", "Home")',
        data: {
           'values': list,
           'myid': myid
        }            
     });
  });

最后,您的按钮发布页面的原因是它正在提交表单。如果您不希望它实际提交表单,您应该将按钮的类型更改为类型按钮。

<button type="button">Submit</button>
于 2012-09-19T00:49:25.237 回答