InsertionMode.Replace如何在Ajax.BeginForm上工作

时间:2012-05-01 01:10:11

标签: jquery asp.net-mvc-3 ajax.beginform

我的asp.net mvc视图中有以下Ajax.beginform,其中ajax调用的结果将替换<div id= "searcharea">,如下所示: -

@using (Ajax.BeginForm("Search", "Patient",
    new AjaxOptions
{
    HttpMethod = "GET",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "searcharea",
    LoadingElementId = "progress2"
}))
{
   <table >

 <tr>

        <th>
         Searching By First Name (English) :-
        </th>
        <th>
          <input type="text" name="firstname"  />
        </th></tr>
      <tr>

        <th>
         Searching By Family Name (English) :-
        </th>
        <th>
          <input type="text" name="familyname"  />
        </th></tr>

      <input type="submit" value="Search      " /></th><th></th></tr>
  </table>

}

<div id = "progress2">
<img src= "@Url.Content("~/Content/images/Ajax-loader-bar.gif") ">
</div>
<p>
<div id= "searcharea">
</div>

所以在开始我虽然我只能执行一次搜索,因为<div id= "searcharea">将替换为ajax调用的结果,并且在此之后它将不会是avilalbe,如果我尝试做anther ajax调用将不再有<div id= "searcharea">替换结果。

但实际发生的是我能够毫无问题地进行多次搜索,这是否意味着InsertionMode.Replace不会替换DOM元素,并且只会插入ajax调用的结果在这个DOM中,因为我无法理解如何多次引用DOM元素,即使它被我的第一个ajax调用替换了 ??? !!谁能解释这是怎么发生的? BR

1 个答案:

答案 0 :(得分:13)

你误解了InsertionMode.Replace。它将替换内部您使用UpdateTargetId指定的HTML元素,而不是元素本身。

相同
$("#searcharea").html(newHTMLcontent);

由于你提到的原因,销毁它所使用的元素的插入模式不会非常有用:你只能使用它一次。