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

joh*_* Gu 4 jquery ajax.beginform asp.net-mvc-3

Ajax.beginform在asp.net mvc视图中有以下内容,其中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>
Run Code Online (Sandbox Code Playgroud)

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

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

DMu*_*gan 13

你是误会InsertionMode.Replace.这将取代一切的HTML元素你指定UpdateTargetId,而不是元素本身.

它是一样的

$("#searcharea").html(newHTMLcontent);
Run Code Online (Sandbox Code Playgroud)

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

  • 大家好。我知道我参加聚会已经很晚了。我正在滚动 2015 年 2 月发布的 MVC 5.2.3,您可以将 InsertionMode 指定为“ReplaceWith”,它会执行您所描述的操作(替换 DOM 节点本身,而不仅仅是内部 html)。它可能已包含在早期版本中,但我知道它至少包含在 5.2.3 中。 (2认同)