我对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属性是使用正确的价值观。
如果错误地显示第一个回发而不是后续回发,我做错了什么?
答案 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