C# MVC:我可以在类内控制器外使用ModelState吗?

C# MVC:我可以在类内控制器外使用ModelState吗?,c#,asp.net-mvc,C#,Asp.net Mvc,我能在一节课内做这个吗 ... using System.Web.Mvc; ... public static class aaa { public static test() { if (something) ModelState.AddModelError("", "test"); } } 内部控制器呼叫: 可能吗?我想控制控制器另一部分中类内部的代码。不,不能。您在控制器中引用的是它的属

我能在一节课内做这个吗

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

    public static class aaa 
    {

      public static test() {

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

    }
内部控制器呼叫:


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

不,不能。您在控制器中引用的是它的属性,而不是类。您仍然可以将其作为参数传递给被调用的方法。

您可以这样传递模型状态:

public static void test(ModelStateDictionary ModelState)
{
    if (something) ModelState.AddModelError("", "test");
}
并从控制器内部呼叫:

aaa.test(ModelState);

在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;
    }
}

是的,但是应该在字典或引用之外,编译器不允许这样做,对吗?@David抱歉,我不明白你在说什么?抱歉,我按照你说的做了,但我必须将参数作为引用传递,因为它会在内部或外部参数发生变化,这样做,编译器给了我一个错误,不允许在其中的参数中放入ref或outobject@David您不需要通过
ref
传递它。此函数的返回类型是什么?我在字符串中添加了错误,我将在控制器中获得消息,之后,若消息为空,则无错误,否则我将在控制器内使用AddModelError添加。
//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;
    }
}