我有我的元素索引:
<h2>Index</h2>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('button').click(function () {
$.post("Home/Swap", $("#log").serialize(), function (data) {
$("#log").load("Home/Index #log");
});
});
});
</script>
<form name="list" action="<%=Url.Action("Post", "Home")%>" method="post" id="log">
<% foreach (var k in Model) { %>
<input type="checkbox" id="ids" name="ids" value="<%=k.pos%>" /><%= k.pos %>. To jest numer: <%=k.name%><br />
<% } %>
</form>
<button>Swap</button>
和交换方法:
public ActionResult Swap(int[] ids)
{
int pos1=ids[0];
int pos2=ids[1];
Element element1 = (from t in db.Elements
where t.pos == pos1
select t).Single();
Element element2 = (from t in db.Elements
where t.pos == pos2
select t).Single();
element1.pos = pos2;
element2.pos = pos1;
db.SaveChanges();
return Index();
}
第一次交换元素时,一切正常。但是,当我交换一次,然后尝试交换另外两个时,我得到一个例外:
System.NullReferenceException是 未按用户代码处理
Message =对象引用未设置为 对象的实例。
(交换方法的例外)
这是JQuery的问题,我敢肯定。我认为这条$("#log").load("Home/Index #log");
行 - 它显示了正确的结果,但是如果我尝试多做一次就行不通。如何解决?
编辑:当我刷新页面时,它的工作方式相同 - &gt;在获得异常后(第一次触摸的元素在刷新后交换),首先效果很好
答案 0 :(得分:1)
当你执行.load("url selector")
时,获取该元素,而不是该元素的内容,因此您最终会得到一个嵌套的<form>
,所以改为创建一个包装器并加载该包装器,以便替换 <form>
,如下所示:
<div id="wrapper">
<form name="list" action="<%=Url.Action("Post", "Home")%>" method="post" id="log">
<% foreach (var k in Model) { %>
<input type="checkbox" id="ids" name="ids" value="<%=k.pos%>" /><%= k.pos %>. To jest numer: <%=k.name%><br />
<% } %>
</form>
</div>
<button>Swap</button>
然后加载那个元素,所以你要替换<form>
,如下所示:
$(function () {
$('button').click(function () {
$.post("Home/Swap", $("#log").serialize(), function (data) {
$("#wrapper").load("Home/Index #log");
});
});
});