我在MVC中有一些局部的看法:
<div id="comments"> ... </div>
在那个div里面有一个表单,它使用AJAX调用控制器,并返回相同的局部视图.问题是调用视图的结果取代了div的内容,而不是整个div,我最终得到:
<div id="comments"> <div id="comments"> ... </div> </div>
我在ASP.Net MVC和AJAX的一周体验中唯一可以想到的解决方案是将div放在局部视图之外,使部分视图只包含内部部分,但是该表单将引用外部的id查看表单的位置是否打破了我已经离开的小封装.有没有更好的解决方案?
解决方法
.NET MVC 3附带的不引人注意的Ajax库使用基于jQuery.ajax的四个回调的回调.但是,来自Ajax.BeginForm方法的InsertionMode = InsertionMode.Replace不会导致jQuery的replace被调用.相反,.html(数据)用于替换目标元素(而不是元素本身)的内容.
我已经在我的博客上描述了这个问题的解决方案:
http://buildingwebapps.blogspot.com/2011/11/jquerys-replacewith-and-using-it-to.html