asp.net mvc3里如何弹出javascript对话框?
/// <summary>
/// 从web服务器上下载文件
/// </summary>
/// <returns></returns>
public ActionResult DownFromDisk(string dataId)
{
try
{
if (dataId!="")
{
//这里有一些下载的代码
return new EmptyResult();
}
else
{
return Content("<script>alert('未找到文件ID!');</script>");
}
}
catch
{
return JavaScript("alert('数据下载时发生异常!');");
}
}
如上代码,点击列表中的一个链接执行 DownFromDisk?dataId=xxx,从服务器上下载文件,如下载出现错误js提示错误,使用:
return Content("<script>alert('未找到文件ID!');</script>");
可以弹出提示,
使用:
return JavaScript("alert('数据下载时发生异常!');");
总是出现下载文件...
我不想用content返回actionResult,因为用content背景会出现空白,而且页面无法返回。
[解决办法]
使用JavaScriptResult,貌似只能在Ajax调用的时候使用,然后在页面上使用eval()来执行。
如果你是在A页面上的一个link,指向某一个Action,然后点击这个link就会下载文件。因为你不想在点击链接后刷新页面,当然你可以使用ajax和JavascriptResult, 也可以不使用ajax,使用JasonResult
public ActionResult DoSomething(){
return Json(new {isok=true, message="Your Message", data=...});
//True / False Json Return
//return UserObj == null ?
//Json(true, JsonRequestBehavior.AllowGet) :
//Json(string.Format("YourObject '{0}' to String", YourObject),
//JsonRequestBehavior.AllowGet);
}
//view
$.ajax
{
//code
success :function(returnvalue)
{
if(!returnvalue.isok)
{
window.alert("Error:" + returnvalue.message);
}
else
{
//do the stuff with returnvalue.data
}
}[解决办法]
首先,楼主你要明白每个controler返回的都是ActionView、无论Content函数还是JavaScript函数,返回的都是内容 ,只不过返回形式不一样,ContentType不一样而已,JavaScript返回ContentType:"text/javascript",解析器肯定就当文件处理了,直接下载了。Content只返回了一段Js,ContentType:"text/html",肯定解析了<script>alert('未找到文件ID!');</script>。
建议要么用Ajax调用,要么在返回View的时候 添加一个,ViewData:
ViewData["Tips"] = "<script>alert('未找到文件ID!');</script>";
然后到视图输出就行了。。@ViewData["Tips"]
[解决办法]
总感觉在后台写js这种方式并不好,应该通过异步给前端返回值,让前台弹框。。。
[解决办法]
两种方法
1:
var script = String.Format("<script>alert('修改成功!');location.href='{0}'</script>", Url.Action("Index"));
return Content(script, "text/html");2:
return Content("<script>alert('添加失败!');</script>");