我有一个具有数字和字符串属性的模型,每个属性都有 [Required] 验证注释。我也有一个相应的视图,它是这个模型的输入表单。出于某种原因,一旦加载视图,字符串属性所需的验证消息就会立即显示,而数字属性所需的验证消息仅在用户尝试提交表单时才显示(如预期的那样)。有没有人知道字符串属性上的奇怪验证行为?
更新
我将问题缩小到从控制器操作显示视图的“复杂”方式。在我的例子中,我有一个控制器操作 Create,负责创建一个具有许多属性的实体。由于实体具有许多属性,因此我通过服务器端向导将此过程拆分为多个步骤。以下是我的控制器操作的简化版本:
public ActionResult Create()
{
Model = new CreateEditListingViewModel();
return View("StepOne");
}
[HttpPost]
public ActionResult Create(string buttonValue, StepOneViewModel stepOneModel, StepTwoViewModel stepTwoModel, StepThreeViewModel stepThreeModel)
{
ActionResult nextView = null;
CreateListingSteps step = (CreateListingSteps)Enum.Parse(typeof(CreateListingSteps), buttonValue);
// Save the value of the step that has been submitted and redirect user to next step
switch (step)
{
case CreateListingSteps.StepOne:
Model.StepOne = stepOneModel;
nextView = View("StepTwo");
break;
case CreateListingSteps.StepTwo:
Model.StepTwo = stepTwoModel;
nextView = View("StepThree");
break;
case CreateListingSteps.StepThree:
Model.StepThree = stepThreeModel;
nextView = View("Confirm");
break;
}
return nextView;
}
显然发生的事情是,一旦用户第一次单击“下一步”按钮(在所有步骤视图中都可用),就会为所有后续表单触发验证,因此即使用户尚未提交表单,也会不希望地将字符串字段显示为无效.
谁能想到一个解决方法?