0

我在 IE9 上使用 MVC 3、c# 在我的控制器中,我有以下 2 个重要的 ActionResul:

    public ActionResult EditTrain(String trainid)
    {
       ....
       return PartialView(edittrain);
    }


    [HttpPost]
    public ActionResult EditTrain(Train editrain)
    {
       ....
       DataContext.SubmitChanges();      
       return RedirectToAction("Edit", new { id = trainid });                  
    }

在局部视图中,我有以下代码:

    @model Models.EditTrain
    @{
       ViewBag.Title = "Training";
    }

    <h2>Train</h2>
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "theForm" }))
    {
      @Html.ValidationSummary(false)

      @Html.HiddenFor(model => model.ID)

      <div class="display-label" style="font-weight: normal">
       @Html.Label("ID:")
      </div>
      <div class="display-field">
       @Html.DisplayFor(model => model.ID)
      </div>   

      <div class="display-label" style="font-weight: normal">
        @Html.Label("KitID:")
      </div>
      <div class="display-field">
       @Html.DisplayFor(model => model.KitID)
      </div> 

      <div class="editor-label">
         @Html.Label("Inactive:")
      </div>
      <div class="editor-field">
         @Html.EditorFor(model => model.Inactive)
      </div>    

      <div class="editor-label">
       @Html.Label("Inactive Date:")
     </div>   

     <div id='datepicker' class="editor-field">
       @Html.EditorFor(model => model.InactiveDate)
     </div> 
      ......
      <div style="clear:left;"> 
       <br />         
       <p>
        <input type="submit" id="submit" value="Submit" />
       </p>
      </div> 
    }  

   <script type="text/javascript">

   $.ajaxSetup({ cache: false }); 

   $(document).ready(function () {

     $("#submit").click(function () {

       $.ajax({
               type: "POST",
               url: url,
               data: $('#theForm').serialize()
             });

       $("#stlist").load('@Url.Action("KitsEdit","Spr")' + '?id=' +  '@Model.sprid');

     });
   });

在上面的代码中,我喜欢上面发生的事情是,一旦用户点击提交,我喜欢它转到以下操作:

    [HttpPost]
    public ActionResult EditTrain(Train editrain) 

然后返回视图并运行以下代码

       $("#stlist").load('@Url.Action("KitsEdit","Spr")' + '?id=' +  '@Model.sprid');

发生的事情是它执行上述操作但在运行之后

    $("#stlist").load('@Url.Action("KitsEdit","Spr")' + '?id=' +  '@Model.sprid'); 

它运行

    [HttpPost]
    public ActionResult EditTrain(Train editrain)

第二次。

我怎样才能防止它去

    [HttpPost]
    public ActionResult EditTrain(Train editrain) 

在.load() 之后。

4

2 回答 2

0

您应该false从您的.click()处理程序返回。但是看看你的代码,它在概念上有些问题。您在触发 AJAX 请求后立即调用该.load方法,甚至无需等待此 AJAX 请求完成。此外,调用使用 AJAX 重定向到另一个操作的控制器操作也没有什么意义。

于 2012-07-11T15:42:43.443 回答
0

你可以使用request.Abort()

$(document).ready(function () {

     $("#submit").click(function () {

       var request = $.ajax({
               type: "POST",
               url: url,
               data: $('#theForm').serialize()
             });

       $("#stlist").load('@Url.Action("KitsEdit","Spr")' + '?id=' +  '@Model.sprid');
request.Abort()
     });
   });
于 2012-07-11T15:44:44.170 回答