Как отобразить исключение (тип) передать в AddModelError? - PullRequest
0 голосов
/ 23 ноября 2018

ValidationSummary отображает его, только если я передаю exception.Message.

, и ничего не отображается, если я передаю exception.

Но AddModelError принимает тип исключения.

Как отобразить Exception?

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:

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

Просмотреть модель:

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

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

1 Ответ

0 голосов
/ 23 ноября 2018

ModelState.AddModelError() принимает значение string.Он в основном используется для отображения на экране ошибки friendly , чтобы пользователь увидел, что что-то пошло не так.

Вы можете проанализировать исключение и добавить дополнительный «внутренний код» вашего собственного изобретения, который пользователь может процитировать вам, чтобы помочь вам разобраться в любых проблемах, возможно?

например, Извините, нетбыла проблема с завершением вашего действия [ERR: 1234] (где 1234 - это ваша внутренняя ссылка для чего-либо).

В качестве альтернативы, если вы хотите вывести все исключение независимо от UX, вы можете установитьNewtonsoft JSON.NET упакуйте через Nuget и сериализуйте Исключение в строку, передаваемую следующим образом:

[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);
    }
}
...