MVC jQuery重新排序列表未在回发时订购

时间:2011-02-15 17:45:31

标签: jquery asp.net-mvc razor

我对MVC很新,从版本3开始。我遇到了MVC3附带的jQuery重新排序列表的问题。

视图从我的模型的枚举中呈现:

@using (Html.BeginForm())
{

    <ul id="questionlist" class="ReorderList">
        @for (int i = 0; i < data.Count(); i++)
        {
            <li>
                <span class="dragHandle"></span>
                @Html.HiddenFor(x => data[i].ID)
                @Html.HiddenFor(x => data[i].DisplayOrder)
                @Html.TextBoxFor(x => data[i].QuestionText)
            </li>
        }
    </ul>

    <input type="submit" value="Save" />
}

当页面加载时,jquery是列表中的init:

<script type="text/javascript">
    $(document).ready(function () {
        var unordered = $("#questionlist").sortable({
            axis: 'y',
            update: listUpdated });
    });

    function listUpdated(event, ui) {
        $('input[name$="DisplayOrder"]').each(function (index) { this.value = index; });
    }
</script>

正如您在订单更新后所看到的那样,jQuery正在更新映射到我模型上的DisplayOrder属性的所有隐藏字段。

调试这个我可以看到值正确地发布回控制器,业务对象在SQL Server中正确更新和保存。在表上运行查询我可以看到所有内容都应该更新。

我的问题出现在用户点击“保存”按钮时,返回的HTML是原始顺序,而不是他们将其更改为的顺序。 Fiddler以原始顺序显示HTML,但DisplayOrder隐藏字段具有正确(已更改)的值。 单击屏幕上的导航按钮以刷新视图会以正确的顺序呈现列表。我已经通过渲染过程进行了调试,一切看起来都按照正确的顺序进行渲染,我也尝试用OutputCaching设置为false来装饰控制器,但当然,由于DisplayOrder属性是使用正确的价值观。

如果错误地显示第一个回发而不是后续回发,我做错了什么?

1 个答案:

答案 0 :(得分:0)

实际上,我推断由于HTML Helpers&amp; amp;的处理模型,在回发期间不可能改变模型。 MVC。

我可能没有正确使用这些词语,所以最好自己看一下 -

How to modify posted form data within controller action before sending to view?

原始链接: http://www.gxclarke.org/2010/05/consumption-of-data-in-mvc2-views.html