2014-10-16 70 views
0

我有这样的:Ajax调用,但屏幕仍然上升

查看:

<div id="tabs-2"> 
     @using (Ajax.BeginForm("EditPhotos", "Account", 
     new AjaxOptions() 
     { 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "Post", 
     }, 
      new { enctype = "multipart/form-data"} 





     )) 

      //new { enctype = "multipart/form-data" })) 
     { 
      @Html.AntiForgeryToken() 

      <div class="form-horizontal"> 
       <h4>Photos</h4> 
       <hr /> 
       @Html.ValidationSummary(true) 
       @Html.HiddenFor(model => model.Id) 



       <form class="form-horizontal"> 

        <div class="editor-label"> 
         @Html.LabelFor(model => model.DisplayItem) 
        </div> 
        <div class="editor-field"> 
         @Html.EditorFor(model => model.DisplayItem) 

        </div> 

        <div id="upload-choices"> 
         <div class="editor-label"> 
          @Html.LabelFor(m => m.Image) 

          @Html.ValidationMessageFor(model => model.Image) 
         </div> 
         <div class="editor-row"> 
          @Html.ValidationSummary(true) 
         </div> 
        </div> 

        <br /> 


        <img width="200" height="150" src="@Url.Action("GetImage", "Account", new { id = Model.Id })"> 
        <input type="file" name="file" /> 
       </form> 
       <br /> 
       <div class="pull-left"> 
        <div class="col-md-offset-0"> 
         <input type="submit" value="Save" class="btn btn-default pull-left" /> 

        </div> 
       </div> 
      </div> 
     } 

     <br /><br /> 
     <div> 
      @Html.ActionLink("Back to List", "Index") 
     </div> 

    </div> 

和jQuery:

@section Scripts 
    { 
     <link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" /> 
     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
     <script src="@Url.Content("~/Scripts/jquery-1.11.0.min.js")" type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-ui-1.10.4.min.js")" type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
     <script> 
      $(document).ready(function() { 
       $("#tabs").tabs(); 

       $("#tabs").tabs("select", window.location.hash); 

       //var param = $(document).getUrlParam('selectedTab'); 
       //$('#tabs').tabs('select', param); 
      }); 
     </script> 
} 

和控制器的操作方法:

[HttpPost] 
     public ActionResult EditPhotos(UserProfile userprofile,HttpPostedFileBase file) 
     { 

      if (file != null && file.ContentLength > 0) 
      { 


       // extract only the fielname 
       var fileName = Path.GetFileName(file.FileName); 
       // store the file inside ~/App_Data/uploads folder 
       var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
       file.SaveAs(path); 
      } 

      if (ModelState.IsValid) 
      { 
       string username = User.Identity.Name; 
       // Get the userprofile 
       UserProfile user = db.userProfiles.FirstOrDefault(u => u.UserName.Equals(username)); 

       // Update fields 
       user.Image = new byte[file.ContentLength]; 
       file.InputStream.Read(user.Image, 0, file.ContentLength); 
       user.ImageMimeType = file.ContentType; 

       db.Entry(user).State = EntityState.Modified; 

       db.SaveChanges(); 

       return Redirect(Url.Action("Edit", "Account") + "#tabs-2"); 

      } 
      return View(userprofile);  

     } 

哦,我可以保存照片,当我保存照片时当前选项卡保持选定选项卡。但保存后屏幕上升。所以它似乎是一个完整的回帖,而不是部分回帖。在我保存之前出现我看到三个选项卡。但在我保存选项卡后弹出。但我做了一个阿贾克斯电话。那该怎么办?

谢谢

奥凯,我有现在这样的:

@section Scripts 
{ 
    <link href="@Url.Content("~/Content/themes/base/jquery-ui.css")" rel="stylesheet" type="text/css" /> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    <script src="@Url.Content("~/Scripts/jquery-1.11.0.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery-ui-1.10.4.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
    <script> 
     $(document).ready(function() { 

       $("#tabs").tabs(); 
       $(document).on("click", ".btn", function() { 
       $("#tabs").tabs("select", window.location.hash); 

       //var param = $(document).getUrlParam('selectedTab'); 
       //$('#tabs').tabs('select', param); 
      }); 
     }); 
    </script> 
} 

,因为如果我这样做:

$(document).on("click", ".btn", function() { 

       $("#tabs").tabs(); 

       $("#tabs").tabs("select", window.location.hash); 

       //var param = $(document).getUrlParam('selectedTab'); 
       //$('#tabs').tabs('select', param); 
      }); 

我没有看到的标签了

我有这个:

<div class="pull-left"> 
      <div class="col-md-offset-0"> 
       <input type="button" value="Save" class="btn btn-default pull-left" /> 

      </div> 
     </div> 
    </div> 

但是,你是什么意思,你没有看到Ajax调用?

我有这样的:

<div id="tabs-2"> 
     @using (Ajax.BeginForm("EditPhotos", "Account", 
     new AjaxOptions() 
     { 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "Post", 
     }, 
      new { enctype = "multipart/form-data"} 





     )) 

      //new { enctype = "multipart/form-data" })) 
     { 
      @Html.AntiForgeryToken() 

      <div class="form-horizontal"> 
       <h4>Photos</h4> 
       <hr /> 

等等

但仍屏幕上升,之后保存

好吧,我现在有这样的:

$(document).ready(function() { 

      $.ajax({ 
       url: resolveUrl("/Account/EditPhotos/"), 
       type: "POST", 
       processData: false, 
       contentType: false, 
       data: data, 
       success: function (response) { 
        //code after success 

       }, 
       error: function (er) { 
        alert(er); 
       } 

      }); 


     }); 

但仍然页面上升

如果我这样做:

$(document).on("click", ".btn", function(){ 

     $("#ajaxUploadForm").ajaxForm({ 
      iframe: true, 
      type: 'POST', 
      dataType: "json", 
      cache: false, 
      timeout: 1200000, 
      async: false, 
      beforeSubmit: function() { 
       //Do something here if needed like show in progress message 
      }, 
      //success: function (result) { 
      // alert("sucess" 
      // }, 
      error: function (xhr, textStatus, errorThrown) { 
       alert("Error uploading file"); 
      } 
     }); 
     }); 

有:

<div class="pull-left"> 
        <div class="col-md-offset-0"> 
         <input type="button" value="Save" class="btn btn-default pull-left" /> 

        </div> 
       </div> 

则什么也不会发生,

+0

你刚才在您的document.ready Ajax调用。你需要将ajax调用放入点击事件中,就像我在下面的答案中一样,这将触发按钮点击。 – 2014-10-16 22:03:17

回答

0

我没有看到你的Ajax代码发布,但你的按钮是一个提交按钮,而不仅仅是一个按钮。你需要改变,要

<input type="button" value="Save" class="btn btn-default pull-left" /> 

,并在你的脚本的事件更改为点击事件

$(document).on("click", ".btn", function(){ 
    ... 
+0

谢谢你的帮助,我编辑我的帖子 – 2014-10-16 14:25:28

+0

你如何做ajax调用是通过需要回发的表单,因此页面向上移动。要做一个没有帖子后面的ajax调用,请看这里http://stackoverflow.com/questions/2320069/jquery-ajax-file-upload – 2014-10-16 15:34:32

+0

我编辑我的帖子ok – 2014-10-16 22:00:55

相关问题