MVC c# - 提交时只需要执行一次POST

时间:2012-07-11 15:08:07

标签: asp.net-mvc jquery razor

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

    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) 

然后返回View并运行以下代码

       $("#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()之后。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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()
     });
   });