Использование
AjaxOptions { UpdateTargetId = "myDiv", InsertionMode = InsertionMode.Replace }
должно заменить все содержимое элемента '#myDiv', как говорит tvanfosson. Ваша проблема в том, где находится «#myDiv». Вот пример:
<div id="myDiv">
<% Html.RenderPartial("MyPartialView"); %>
</div>
где MyPartialView:
<div id="comments">
<% using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "myDiv", InsertionMode = InsertionMode.Replace } )) {%>
...
<input type="submit" value="Submit comment" />
<% } %>
</div>
Если вы включите div "#myDiv" в частичное представление, оно будет отображено сразу после получения ответа (вместе с его содержимым), а затем его содержимое будет заменено ответом, который является тем же частичным представлением ( свой собственный div "#myDiv"), и поэтому вы всегда получаете 2 вложенных div.
Вы должны всегда использовать контейнер для частичных представлений, а затем установить UpdateTargetId в качестве идентификатора контейнера.
Редактировать: Я обновил код, чтобы представить точную ситуацию, которую вы описываете в своем вопросе.