【问题标题】:MVC: Can I use ModelState inside class out of controller?MVC:我可以在控制器外的类中使用 ModelState 吗?
【发布时间】:2020-02-04 21:34:55
【问题描述】:

我可以在一个班级内这样做吗?

    ...
    using System.Web.Mvc;
    ...

    public static class aaa 
    {

      public static test() {

         if (something) ModelState.AddModelError("", "test");
      }

    }

内部控制器调用:

...

public class MyControler {

     public void Index() {
          ....
          aaa.test();
          ....
     }

}

有可能吗?我想控制控制器另一部分的类中的代码。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

    public static void test(ModelStateDictionary ModelState)
    {
        if (something) ModelState.AddModelError("", "test");
    }
    

    并从您的控制器内部调用:

    aaa.test(ModelState);
    

    【讨论】:

    • 是的,但应该超出字典或参考,编译器不允许,对吧?
    • @David 抱歉,我不明白你在说什么?
    • 对不起,我按照你说的做了,但我必须将参数作为参考传递,因为会在内部或作为输出参数发生变化,这样做,编译器给我一个错误,不允许放置 ref或在该对象的参数中
    • @David 你不需要通过ref
    • 这个函数的返回类型是什么?
    【解决方案2】:

    不,你不能。您在 Controller 中引用的是它的 property,而不是类。您仍然可以将它作为参数传递给被调用的方法。

    【讨论】:

    • 我在字符串中添加了错误,我将在控制器中获取消息,如果消息为空则没有错误,否则我将在控制器中使用 AddModelError 添加。
    【解决方案3】:

    在 ASP.NET Core 2 中运行良好:

    //Controller
    if (MyValidator.SaveValidation(model, ModelState))
            {
                myManager.Update(model);
    
                return Json(new
                {
                    responseText = "Saved"
                });
            }
    
    //Validator
    public static class SaveDossierValidator
    {
        public static bool SaveValidation(MyModel model, ModelStateDictionary modelState)
        {
            if (model.property == null) {
                modelState.AddModelError("property", "Error message");
            }
    
            return modelState.IsValid;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多