MVC显示错误消息

时间:2014-03-07 15:19:40

标签: asp.net-mvc wcf

我正在尝试找到一种方法将错误消息从我的控制器传回我的视图。

    public ActionResult Index()
    {
        ViewBag.splittingFileMessage = "Splitting File...";
        ViewBag.startBatchMessage = "Start Batch Processing : ";
        return View();
    }

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        var numberRecordsPerFile = int.Parse(ConfigurationManager.AppSettings["NumberRecordsPerFile"]);
        var inputFileFolder = ConfigurationManager.AppSettings["InputFileFolder"];

        var batchSplitterClient = new SplitterServiceClient();
        var batchSplitterResponse = 
            batchSplitterClient.SplitFile(new BatchSplitterRequest
            {
                FilePath = inputFileFolder, 
                NumberOfRecordsPerFile = numberRecordsPerFile
            });
        var numberOfMessages = batchSplitterResponse.NumberOfMessages;

        if (batchSplitterResponse.Result.ResultCode == 200)
        {
            return RedirectToAction("Progress");
        }
        else
        {
            ViewBag.error = "test error";
            return RedirectToAction("Index");
        }
    }

所以你可以在我的Httppost方法中看到我试图设置一个错误信息,即ViewBag.error,如果它出现在我的WCF调用中。

但是在我对初始负荷的看法中,这还没有确定。

我认为我有

<div class="errors">
        <%: ViewBag.error %>
</div>

但是在初始页面加载时,ViewBag.error上出现了错误

The call is ambiguous between the following methods or properties: 'System.IO.TextWriter.Write(string, params object[])' and 'System.IO.TextWriter.Write(char[])'

3 个答案:

答案 0 :(得分:0)

用户HandleErrorAttribute和错误页面或Elmah for Validation错误添加到Modelstate和Use Error Page以查找验证错误并显示

如果它回答了你的问题,请勾选左侧的正确标记,以便回答

答案 1 :(得分:0)

尝试将其转换为字符串

<div class="errors">
        <%: (string)ViewBag.error %>
</div>

ViewBag.error.ToString()

答案 2 :(得分:0)

[HandleError(View = "Error")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        int u = Convert.ToInt32("");// Error line
        return View();
    }
}

Action Method Level的HandleError属性

[HandleError(View = "Error")]
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    int u = Convert.ToInt32("");// Error line
    return View();
}

在全局级别定义HandleError属性

我们还可以在全局级别应用HandleError属性,方法是在Application_Start事件的Global.asax中注册它。

实施例

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute(), 2); //by default added


    filters.Add(new HandleErrorAttribute
    {
        View = "Error"
    }, 1);
}
protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

错误页面

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Error";
}
<h2>
    Sorry, an error occurred while processing your request.
    <br />
    Error :
</h2>
<p>
     @Model.Exception
</p>

启用自定义错误处理

要通过HandleError属性在应用程序中启用自定义错误处理,我们必须在web config的system.web部分中添加CustomErrors元素。

输出

捕获特定类型的错误

ExceptionType属性可以帮助我们捕获特定类型的错误。例如,如果我们只想捕获ApplicationException类型的异常,那么我们可以定义ExceptionType。

[HandleError(ExceptionType = typeof(ApplicationException), View = "Error")]
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    int u = Convert.ToInt32(""); // Error line
    return View();
}
相关问题