加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用ASP.NET MVC,如何在外部控制器上显示错误?

发布时间:2020-12-16 03:24:46 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用以下代码在我的代码中的任何位置轻松显示错误: @Html.ValidationSummary("",new { @class = "text-danger" }) 在MVC之前,我用过: ValidationError.Display("My error message"); 我的ValidationError类看起来像这样: public class Validati
我正在尝试使用以下代码在我的代码中的任何位置轻松显示错误:

@Html.ValidationSummary("",new { @class = "text-danger" })

在MVC之前,我用过:

ValidationError.Display("My error message");

我的ValidationError类看起来像这样:

public class ValidationError : IValidator
{
    private ValidationError(string message)
    {
        ErrorMessage = message;
        IsValid = false;
    }

    public string ErrorMessage { get; set; }
    public bool IsValid { get; set; }

    public void Validate()
    {
        // no action required
    }

    public static void Display(string message)
    {
        // here is the only part I would like to change ideally
        var currentPage = HttpContext.Current.Handler as Page;                
        currentPage.Validators.Add(new ValidationError(message));
    }

}

现在使用MVC,添加错误,我不能使用currentPage.Validators.
我需要使用ModelState,但我的问题是,当我不在Controller中时,我无法访问ModelState.我尝试通过HttpContext访问控制器或ModelState,但我找不到办法.任何的想法 ?

ModelState.AddModelError("","My error message");

解决方法

1.您可以通过ViewContext.ViewData.ModelState访问它.然后用

@if (!ViewContext.ViewData.ModelState.IsValid)
{
    <div>There are some errors</div>
}

要么

ViewData.ModelState.IsValidField("NameOfInput")

获取输入列表:

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList();

你可以像这样传递你的模型状态:

public class MyClass{
    public static void errorMessage(ModelStateDictionary ModelState) {
        if (something) ModelState.AddModelError("","Error Message");
    }
}

在控制器中使用:

MyClass.errorMessage(ModelState);

在视图中使用:

MyClass.errorMessage(ViewContext.ViewData.ModelState.IsValid);

3. ModelState通过ActionFilter

public class ValidateModelAttribute : ActionFilterAttribute
{
     public override void OnActionExecuting(ActionExecutingContext filterContext)
     {
          if (filterContext.Controller.ViewData.ModelState.IsValid)
          {
                //Do Something 
          }
     }
}

您可以从this和this链接获得更多帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读