Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用数据注释使用互斥验证在同一视图中的模型中验证同一属性_C#_Asp.net Mvc_Data Annotations - Fatal编程技术网

C# 使用数据注释使用互斥验证在同一视图中的模型中验证同一属性

C# 使用数据注释使用互斥验证在同一视图中的模型中验证同一属性,c#,asp.net-mvc,data-annotations,C#,Asp.net Mvc,Data Annotations,我有一个需要验证下拉列表的需求。在按钮1上单击,模型应验证下拉列表是否未被选中;在按钮2上单击,模型应验证下拉列表是否被选中为有效值;如果该值是下拉列表中的某个值,则相应字段也标记为必需 我的模型如下: public class ApprovalInformation { [DisplayName("Approval Decision")] public int? ApproveStatusID { get; set; } public string ApproveSt

我有一个需要验证下拉列表的需求。在按钮1上单击,模型应验证下拉列表是否未被选中;在按钮2上单击,模型应验证下拉列表是否被选中为有效值;如果该值是下拉列表中的某个值,则相应字段也标记为必需

我的模型如下:

public class ApprovalInformation
{

    [DisplayName("Approval Decision")]
    public int? ApproveStatusID { get; set; }
    public string ApproveStatus { get; set; }
    public SelectList ApproveStatuses { get; set; }

    [DisplayName("Additional Information")]
    [RequiredIf("ApproveStatus", StringConstants.NotApproved, ErrorMessage = "You must specify the comments if not approved")]
    public string AdditionalInformation { get; set; }
}
目前我有两个动作方法,我根据按钮名的值调用它们。以下是控制器代码:

public ActionResult SaveApproval(ApprovalInformation approveInfo,string submit)
    {
        if (submit == "Save For Later")
        {
            Business business = new Business();
            int selectedStatusID = approveInfo.ApproveStatusID??0;
            if ( selectedStatusID!= 0)
            {
                ModelState.AddModelError("ApproveStatusID", "You may not set the Approval Decision before saving a service request for later.  Please reset the Approval Decision to blank");
            }
            if (ModelState.IsValid)
            {
              return RedirectToActionPermanent("EditApproval");
            }

            return View("EditApproval", approveInfo);
        }
        else
        {
            TempData["approverInfo"] = approveInfo;
            return RedirectToActionPermanent("FinishApproval");
        }
    }

我在根据单击的按钮插入验证时遇到问题。由于在不同的按钮上单击,相同的属性应以两种不同的方式进行验证。如何根据不同的操作在同一模型的运行时抑制验证或诱导验证。任何关于这方面的想法都将不胜感激。

我相信这是一个很好的情况,可以在您的
批准信息上实现视图模型。您可以在
ValidationContext
字典中传递
submit
save for later
的意图,以获得所需的重用

您也可以在此处放置“如果未设置ApprovalStatus,则必须设置附加信息”

public class ApprovalInformation : IValidatableObject
{
    ... // Properties

    IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
       if (validationContext.ContainsKey("submit"))
       {
          if (ApproveStatusID != 0)
          {
              yield return new ValidationResult("You may not set the Approval Decision before saving a service request for later.  Please reset the Approval Decision to blank", 
                                                 new {"ApproveStatusID"});
          }
       }
    }
}
公共类批准信息:IValidatableObject
{
…//属性
IEnumerable验证(ValidationContext ValidationContext)
{
if(validationContext.ContainsKey(“提交”))
{
如果(ApprovestStatusID!=0)
{
yield return new ValidationResult(“在保存服务请求供以后使用之前,您不能设置审批决定。请将审批决定重置为空”,
新的{“approvestausid”});
}
}
}
}

我认为这是一个很好的情况,可以在您的
批准信息
视图模型上实施。您可以在
ValidationContext
字典中传递
submit
save for later
的意图,以获得所需的重用

您也可以在此处放置“如果未设置ApprovalStatus,则必须设置附加信息”

public class ApprovalInformation : IValidatableObject
{
    ... // Properties

    IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
       if (validationContext.ContainsKey("submit"))
       {
          if (ApproveStatusID != 0)
          {
              yield return new ValidationResult("You may not set the Approval Decision before saving a service request for later.  Please reset the Approval Decision to blank", 
                                                 new {"ApproveStatusID"});
          }
       }
    }
}
公共类批准信息:IValidatableObject
{
…//属性
IEnumerable验证(ValidationContext ValidationContext)
{
if(validationContext.ContainsKey(“提交”))
{
如果(ApprovestStatusID!=0)
{
yield return new ValidationResult(“在保存服务请求供以后使用之前,您不能设置审批决定。请将审批决定重置为空”,
新的{“approvestausid”});
}
}
}
}