我是网络开发的新手(大约一个月),我遇到了一些奇怪的事情。
我正在使用VS2010,MVC 3 Razor来创建一个简单的应用程序。
我有两张表持有相同类型的信息。如同表A和表B中的用户一样。区别在于,表A包含“角色”中的用户,表B包含不在“角色”中的用户。
两个表都有两列,一列是用户名,另一列是Ajax.ActionLink。
因此,要将用户添加到表“B”,我单击表“A”上的“Ajax.Actionlink”。 “添加”通过MVC操作保存,我使用AjaxOption OnSuccess事件移动表行。 OnSuccess事件基本上移动了Row,并改变了Ajax.ActionLink,因此新添加的User行的ActionLink将删除用户。
我希望这很清楚。
一切正常。我可以将用户“A”添加到表“A”,一切正常。我可以将表“A”中的用户“A”删除到表“B”,一切都很好。但我不能将用户A重新添加到表“A”。 OnSuccess运行,因此行移动,但不调用Action事件。因此,如果我刷新屏幕,我可以看到移动实际上没有发生。如果我从表“B”上的用户“B”开始,它是相同的。此外,页面刷新(F5)不会修复链接,在关闭并重新打开页面之前,页面刷新仍然会中断。
HTML中的一切看起来都很好,它在状态栏中显示当我点击链接时,正在调用正确的href,但是fiddler没有注册任何调用,并且没有调用该操作。
我怀疑我有某种约束性问题,但我迷失在这里。一切都在Firefox中运行良好
请帮忙。下面的代码,添加了评论。请记住,这可以添加和删除,删除和添加,但重新添加和重新删除只调用该函数但不调用Action。所以我知道动作拼写正确等等。
//// element is the ID of the element i am Moving
//// targetElement is the ID of the tbody i am moving the element to
function move_element(element, targetElement) {
try
{
//// get the HTM
var elementHTML = $("tr[id=" + element + "]").children(".Action").html();
//// based on the tbody id
switch (targetElement)
{
case "AssignedToGroup":
//// Change the target body for next call to this function
elementHTML = elementHTML.replace("AssignedToGroup", "UnassignedToGroup");
//// change th action name
elementHTML = elementHTML.replace("AddGroupRole", "DeleteGroupRole");
//// change the display label
elementHTML = elementHTML.replace("Assign", "Remove");
break;
case "UnassignedToGroup":
elementHTML = elementHTML.replace("UnassignedToGroup", "AssignedToGroup");
elementHTML = elementHTML.replace("DeleteGroupRole", "AddGroupRole");
elementHTML = elementHTML.replace("Remove", "Assign");
break;
}
//// Create the new Ajax <td> element
$("tr[id=" + element + "]").children(".Action").replaceWith("<td class='Action'>" + elementHTML + "</td>")
//// Add the row to the other body
$("tr[id=" + element + "]").appendTo($("tbody[id=" + targetElement + "]"));
}
catch (e)
{
alert(e.Message); ////NO ERROR IS RAISED
}
}
答案 0 :(得分:1)
无法弄清楚这一点。所以最后我只使用了jquery.ajax。
答案 1 :(得分:1)
我正在查看您遇到的类似问题,并在此处找到了解决方案:Cache issue with Ajax.ActionLinks 总结一下:
$.ajaxSetup({ cache: false });
如果
你正在使用不引人注目的javascript支持jquery。 "HttpMethod = "POST"
AjaxOptions。无论如何希望这可以帮助你或其他人,所以我在这里发布了它。