Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript的操作调用打开视图结果_Javascript_Asp.net Mvc_Razor - Fatal编程技术网

如何从javascript的操作调用打开视图结果

如何从javascript的操作调用打开视图结果,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,我正在使用ASP.NETMVC4进行开发。我的索引视图中有一个删除函数。在用户继续删除项目之前,以下是要执行的步骤 弹出一个确认对话框,使用javascript获得“是”或“否”答案 如果用户说“是”,我将从控制器调用删除操作 public ActionResult DeleteFile(int id) { FileUpload f = db.FileUploads.Find(id); try { FileInfo dfil

我正在使用ASP.NETMVC4进行开发。我的索引视图中有一个删除函数。在用户继续删除项目之前,以下是要执行的步骤

  • 弹出一个确认对话框,使用javascript获得“是”或“否”答案

  • 如果用户说“是”,我将从控制器调用删除操作

  • public ActionResult DeleteFile(int id)
    {
        FileUpload f = db.FileUploads.Find(id);
        try
        {                
            FileInfo dfile = new FileInfo(f.fileUrl);
            if (dfile.Exists) { dfile.Delete(); }
            fileUrl = f.FileUrl.Replace("Images/Uploads", "Images/Thumbnails");
            FileInfo thumbnail= new FileInfo(fileUrl);
            if (thumbnail.Exists) { thumbnail.Delete(); }
            db.FileUploads.Remove(f);
            db.SaveChanges();
        }
        catch (Exception ex)
        {
        }
        return RedirectToAction("Index");  // or may i should return something else to make it work in javascript ???
    }
    
  • 删除操作从数据库中删除该项

  • 删除操作返回“重定向到操作(“索引”);”

  • 。。假设视图将使用最新更新进行更新

  • 第五步是我的问题。。它不起作用

    这是我的密码

    删除按钮

    <a href="@Url.Action("DeleteFile", new { id = @item.Id })"  
        onclick = "return confirm2delete(this);"
        class="btn btn-danger btn-sm" 
        data-toggle="tooltip" title="Delete File">
        <i class="fa fa-trash-o"></i>
    </a>
    
    我的控制器中的删除操作

    public ActionResult DeleteFile(int id)
    {
        FileUpload f = db.FileUploads.Find(id);
        try
        {                
            FileInfo dfile = new FileInfo(f.fileUrl);
            if (dfile.Exists) { dfile.Delete(); }
            fileUrl = f.FileUrl.Replace("Images/Uploads", "Images/Thumbnails");
            FileInfo thumbnail= new FileInfo(fileUrl);
            if (thumbnail.Exists) { thumbnail.Delete(); }
            db.FileUploads.Remove(f);
            db.SaveChanges();
        }
        catch (Exception ex)
        {
        }
        return RedirectToAction("Index");  // or may i should return something else to make it work in javascript ???
    }
    

    希望你们能帮助我。几天来我一直在寻找并努力达到这个水平,我觉得是时候寻求一些帮助了。再多一点。差不多了。

    Ajax调用保持在同一页面上,因此调用
    返回RedirectToAction(“Index”)是无意义的(它不会重定向)。在任何情况下,都不需要返回新视图。相反,如果控制器成功删除了该项,则可以从DOM中删除现有元素。您尚未显示视图,但假设您有一个表,其中的一行可能类似于

    <tr>
      <td>the name of the file</td>
      <td>the delete link</td>
    </td>
    
    注意:如果您使用的是jquery 1.9+版本,那么
    $.post()函数中的
    else
    块不是必需的,因为
    返回Json(null)将转到
    .fail()
    回调

    然后在控制器中,返回json以指示该项已成功删除

    [HttpPost]
    public ActionResult DeleteFile(int id)
    {
      FileUpload f = db.FileUploads.Find(id);
      try
      {                
        ....
        db.SaveChanges();
        return Json(true); // signal success
      }
      catch (Exception ex)
      {
        return Json(null); // signal failure
      }
    }
    

    首先,ajax调用保持在同一页面上,因此
    返回RedirectToAction(“Index”)是没有意义的。最简单的方法是返回一个json值,指示该项已成功删除,然后从DOM中删除相应的项。您需要显示其中一行的html来解决此问题。谢谢。。。我听从了你的建议,这是有效的,但我还有一个问题。。如果我还想将值从viewbag发送到操作,我可以这样做吗$.post(url,{id:id,val:viewbag.val},函数(respond){..}不确定为什么需要添加
    viewbag
    属性(控制器将该值发送到视图,因此控制器在您发布时已经知道它是什么,但您可以。您需要提出一个新问题并提供一些ode详细信息,因为实际答案可能会根据
    ViewBag
    属性的不同而有所不同。ok..对于我的第二个注释..我得到了..我们可以发送文本作为返回..因此我可以n检查返回文本是否==“SUCCESS”,然后从视图中删除图像,否则显示错误消息,是的,您可以返回错误消息。例如,如果成功-
    返回Json(new{SUCCESS=true});
    如果不成功-
    返回Json(new{message=“your message”});
    则将脚本修改为
    if(response.success){row.remove();}else if(response.message){alert(response.message)}
    var url = '@Url.Action("DeleteFile")';
    $('.delete').click(function() {
      var id = $(this).data('id');
      var row = $(this).closest('tr'); // modify if the containing element is not a <tr>
      w2confirm("Are sure to delete this file ?")
        .yes(function () {
          $.post(url, { id: id }, function(response) { // its a POST, not a GET!
            if (response) {
              row.remove(); // remove the row
            } else {
              // Oops, something went wrong
            }
          }).fail(function (response) {
            // Oops, something went wrong
          });
        })
        .no(function() {
          alert("no");
        });
    });
    
    [HttpPost]
    public ActionResult DeleteFile(int id)
    {
      FileUpload f = db.FileUploads.Find(id);
      try
      {                
        ....
        db.SaveChanges();
        return Json(true); // signal success
      }
      catch (Exception ex)
      {
        return Json(null); // signal failure
      }
    }