在MVC中显示捕获异常

时间:2017-09-04 16:30:56

标签: asp.net-mvc asp.net-mvc-4 error-handling exception-handling

我对一般的开发和MVC都很陌生。 我试图在我的MVC站点中显示我的存储库抛出的异常。我创建了View:“Error”来处理错误消息。 我的主控制器看起来如下:

using BankMVC.Models;
using BankMVC.WithdrawingService;
using Pocos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace BankMVC.Controllers
{
    public class WithdrawingController : Controller
    {
        WithdrawingServiceClient withdrawingClient;

        public WithdrawingController()
        {
            withdrawingClient = new WithdrawingServiceClient();
        }

        public ActionResult Withdraw(int Id, int TypeId)
        {
            BankAccount bankAccount = new BankAccount();
            bankAccount.BankAccountId = Id;
            bankAccount.BankAccountTypeId = TypeId;
            DepositingWithdrawingViewModel withdrawViewModel =
                new DepositingWithdrawingViewModel();
            withdrawViewModel.BankAccountId = bankAccount.BankAccountId;
            withdrawViewModel.Balance = bankAccount.Balance;
            withdrawViewModel.BankAccountTypeId = bankAccount.BankAccountTypeId;
            return View(withdrawViewModel);
        }

        [HttpPost]
        public ActionResult Withdraw(DepositingWithdrawingViewModel withdrawViewModel)
        {
            BankAccount bankAccount = new BankAccount();
            bankAccount.BankAccountId = withdrawViewModel.BankAccountId;
            bankAccount.BankAccountTypeId = withdrawViewModel.BankAccountTypeId;

            try
            {
                withdrawingClient.Withdraw(withdrawViewModel.Amount, bankAccount);
                return RedirectToAction("Index", "BankAccount");
            }

            catch (Exception e)
            {
                return RedirectToAction("Error", new { message = e.Message });
            }

        }

    }
}

我的主控制器视图如下所示:

@model BankMVC.Models.DepositingWithdrawingViewModel

@{
    ViewBag.Title = "Withdraw";
}

<h2>Withdraw</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Withdraw from Bank Account</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.BankAccountId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.BankAccountId, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.BankAccountId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.BankAccountTypeId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.BankAccountTypeId, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.BankAccountTypeId, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Balance, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Balance, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Balance, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Amount, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Amount, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Amount, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Withdraw" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index", "BankAccount")
</div>

@section Scripts {
        @Scripts.Render("~/bundles/jqueryval")

}

我创建了一个错误模型,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BankMVC.Models
{
    public class ErrorModel
    {
        public string Error { get; set; }
    }
}

我的错误视图应该如何显示错误消息。目前看来如下:

@model BankMVC.Models.ErrorModel

@{
    ViewBag.Title = "Error";
}

<h2>Error</h2>

任何澄清都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我看到你正在重定向到一个名为“Error”的动作,以显示你的错误页面。但我没有看到的是一个名为“错误”的动作方法。请执行以下操作

在名为“Error”的控制器中创建另一个方法

public ActionResult Error(string message)
{
    var model = new ErrorModel();
    model.Error = message;
    return View(model); // make sure your error view is named as "Error". Else u need to specify the view name in the return command.
}

请注意我已使用您发布的错误模型。

同样在错误视图中,您可以通过更改此视图

来利用错误消息
@model BankMVC.Models.ErrorModel

@{
    ViewBag.Title = "Error";
}

<h2>Error</h2>
<h2>Message : @Model.Error</h2>

这也将显示您的错误消息