表单提交之前显示的MVC3 [必需]验证消息

时间:2012-08-28 18:12:39

标签: c# asp.net-mvc-3 razor validation

我有一个具有数字和字符串属性的模型,每个属性都有[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;
    }

显然发生的事情是,一旦用户第一次单击“下一步”按钮(在所有步骤视图中都可用),就会触发所有后续表单的验证,从而不希望地将字符串字段显示为无效,即使用户还没有提交表格。

Blank form that hasn't been submitted showing required message for description field.  Price appears regularly because its data type is not string

有人可以想到一个解决方法吗?

2 个答案:

答案 0 :(得分:4)

我解决了。我需要的只是在返回新视图之前调用ModelState.Clear()

答案 1 :(得分:1)

尝试使用String.Empty初始化字符串。