简体   繁体   English

如何显示Exception(类型)传递给AddModelError?

[英]How to display Exception (type) pass into AddModelError?

ValidationSummary only display it if I pass in exception.Message . ValidationSummary仅在我传入exception.Message

it display nothing if I pass in exception . 如果我exception通过,它什么也不显示。

But AddModelError accept Exception type. 但是AddModelError接受Exception类型。

How do I display Exception ? 如何显示Exception

cshtml: CSHTML:

@model ControlTower2.Models.ViewModelUploadRawMaterial

@{
    ViewBag.Title = "UploadRawMaterialSupplierData";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>UploadRawMaterialSupplierData</h2>

<div>
    @using (Html.BeginForm("UploadRawMaterialSupplierData", "PurchaseOrder", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <table>
            <tr>
                <td>
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                </td>
            </tr>
            <tr>
                <td>
                    @Html.TextBoxFor(model => model.uploadFile, "", new { type = "file" })
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.uploadFile, null, new { @class = "text-danger" })
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="Upload" />
                </td>
            </tr>
        </table>
    }
</div>

ActionResult: 的ActionResult:

[HttpPost]
public ActionResult UploadRawMaterialSupplierData(ViewModelUploadRawMaterial viewModelUploadRawMaterial)
{
    try
    {
        throw new Exception("test UploadRawMaterialSupplierData error!");
    }
    catch (Exception exception)
    {
        ModelState.AddModelError("", exception);
        return View(viewModelUploadRawMaterial);
    }
}

View Model: 查看模型:

public class ViewModelUploadRawMaterial
{
    [Required(ErrorMessageResourceType = typeof(Resources.UploadPurchaseOrder), ErrorMessageResourceName = "errorUploadFileRequired")]
    public HttpPostedFileBase uploadFile { get; set; }

    public List<UploadExcelError> UploadExcelErrors { get; set; }
}

ModelState.AddModelError() accepts a string value. ModelState.AddModelError()接受string值。 It is primarily used to display a friendly error on-screen for the user to see something went wrong. 它主要用于在屏幕上显示友好错误,以便用户查看出现了问题。

You could analyse the exception and add an additional 'internal code' of your own devising that the user could quote to you to help you investigate any issues maybe? 您可以分析异常并添加自己设计的其他“内部代码”,以使用户可以引用您的内容来帮助您调查任何问题?

eg Sorry there was a problem completing your action [ERR:1234] (where 1234 is your internal reference for something). 例如, 对不起,您在完成操作[ERR:1234]时遇到问题 (其中1234是您的内部参考)。

Alternatively, if you want to output the whole Exception regardless of UX, you could install Newtonsoft JSON.NET package via Nuget and serialize the Exception to a string passing that through like this: 另外,如果您希望不考虑UX而输出整个Exception,则可以通过Nuget安装Newtonsoft JSON.NET包,并将Exception序列化为一个字符串,如下所示:

[HttpPost]
public ActionResult UploadRawMaterialSupplierData(ViewModelUploadRawMaterial viewModelUploadRawMaterial)
{
    try
    {
        throw new Exception("test UploadRawMaterialSupplierData error!");
    }
    catch (Exception exception)
    {
        string jsonException = JsonConvert.SerializeObject(exception);
        ModelState.AddModelError("", jsonException);
        return View(viewModelUploadRawMaterial);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM