如何从javascript的操作调用打开视图结果
我正在使用ASP.NETMVC4进行开发。我的索引视图中有一个删除函数。在用户继续删除项目之前,以下是要执行的步骤如何从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
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)下面方法中的code>将转到.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
}
}