【问题标题】:mvc3 dropdownlist to render partial view and persist datamvc3 下拉列表呈现部分视图和持久化数据
【发布时间】:2012-09-18 23:21:07
【问题描述】:

我正在尝试创建一个呈现 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 运行时错误:需要对象

希望有帮助

【问题讨论】:

  • 如果你得到 'Microsoft JScript runtime error: Object expected' 这个错误,它与 JavaScript 相关而不是 asp.net-mvc-3。
  • 是的,但我不知道为什么。填充部分视图所需的所有实体都已填充
  • 我建议您使用诸如 FireBug 之类的工具调试您的 JavaScript 代码,以更接近可能的原因。

标签: asp.net-mvc-3


【解决方案1】:

有很多事情可能是造成这种情况的原因。

您的网址可能不正确。

url: 'Controller/Action/',

应该是:

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

您的按钮提交代码在您的Controller 中引用您的Action,但您可能希望它转到您的PersistActivities。此外,您的控制器操作需要变量myidvalues,但您发送的是id 和值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>

【讨论】:

  • 我有部分视图中提交按钮的代码。
  • 可以,但默认情况下,按钮的类型为“提交”,因此它们将发布您的表单,即:@using (Html.BeginForm("Action", "Controller" )) 所以它会发布整个页面,而不是仅仅调用你的javascript。
  • 我不确定你的意思 - 我可以将类型更改为按钮吗?还是我必须更改我的表单声明/
  • 如果您将 type="button" 添加到您的按钮,它将阻止按钮提交 - 试一试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多