2012-09-27 27 views
0

我有一个控制器谁可以返回一个成功或错误页面是这样的:jQuery和剃刀控制器视图的ActionResult

[HttpPost] 
public ActionResult File_post(HttpPostedFileBase file) 
{ 
    if (...) 
     return View("Success"); 
    else 
     return View("Error"); 
} 

那些成功和错误页面只包含基本的文本并显示在共享/ _Layout.cshtml 。

在我的JS我想调用返回视图定义的那些页面,但我怎么能做到这一点?

我测试过:window.location.reload();
虽然有效,但它只能重新加载实际的索引页面。
如果我尝试:window.location.href = data.url;
由于页面http:// xxx/xxx/File_post不存在,所以失败。
如果我这样做:$('#main').html(data);
页面有好看但内容是空的。

编辑:我使用jquery.fileupload所以我有:

<input id="fileupload" type="file" name="file" /> 

$('#fileupload').fileupload(
{ 
    done: function (e, data) { 
    // Use the return View("Success") 
    }, 
    fail: function (e, data) { 
    // Use the return View("Error") 
    } 
}); 

在我jqXHR.reponseText和data.result有良好的 “成功” 或“错误”的HTML,所以我想我需要填写这个页面,但如何?

任何想法?非常感谢 !

+0

File_post不是ajax调用,还是它?什么时候完成调用?这就是我有点困惑的地方。 –

回答

1

我发现如何做到这一点。 正如我在我的布局a <div id="main"> 我可以使用我的data.result来填充我的“成功”或“错误”消息的页面。 所以我有:

done: function (e, data) { 
    $('#main').html(data.result); 
} 

而且

return PartialView("Success"); 

现在的页面显示正确。

+0

是的,因为我会评论“如果您希望检测到的html JS用于区分消息的'成功'或'错误',则必须在HTML响应中找到一些数据。但在你的例子中,你想把事件中的结果和'失败'结合起来。为此,你必须指定一个不同的退出状态'200' –

0

您可以使用此代码

$.ajax({ 
type: "POST", 
url: Settings.YourUrl, 
data: "{queryString:'" + searchVal + "'}", 
contentType: "application/json; charset=utf-8", 
dataType: "html", 
success: function (data) { 
alert("here" + data.d.toString()); 
}); 

尝试和你的视图,您可以添加以下代码

var Settings= { 
    YourUrl: '@Url.Action("Action","Controller")' 
} 
0

目前的行动只能处理POST请求。因此,您可以创建另一个操作来返回GET请求的视图。

Ex。

public ViewResult Success() 
{ 
    return View(); 
} 
0

您可以将statusCode更改为500或您需要的错误代码;

C#

[HttpPost] 
public ActionResult File_post(HttpPostedFileBase file) 
{ 
    if (...) 
    { 
     return View("Success"); 
    } 
    else 
    { 
     Response.StatusCode = 500; 
     Response.TrySkipIisCustomErrors = true; 
     return View("Error"); 
    } 
} 

JS:

$('#fileupload').fileupload(
{ 
    done: function (e, data) { 
    // Use the return View("Success") 
    }, 
    fail: function (e, data) { // http status response != 200 
    // Use the return View("Error") 
    } 
}); 
+0

这并不回答我的问题,我不知道如何去我的js中的成功或错误页面,因为当我使用js页面时,似乎返回View(...)不起作用。在我没有使用js之前,只用一个按钮调用File_post,它运行良好。 – MaT

+0

在JS中,您不必做任何事情,插件必须检测到存在错误状态,并且必须调用传递给选项“失败”的函数。如果您希望在区分“Success”或“Error”消息时检测到html JS,则必须在HTML响应中找到一些数据。 –

+0

“完成”和“失败”的检测已正确完成。在我的jqXHR中,响应文本包含良好的“成功”或“错误”html,所以我认为我需要用这个填充页面。 – MaT