导致问题的所有页面上都不存在必填字段

时间:2012-07-13 13:40:03

标签: asp.net-mvc-3 razor

我的MVC3应用程序中有一个“创建”页面,其中包含4个输入字段,这些字段都是必需的。我还有一个“编辑”页面,其中可以编辑这4个字段中的3个。我不想显示第4个字段,并希望将其保持在初始值(字段是创建条目的日期)。

我在模型中将第4个字段标记为[Required],然后这会导致模型在Edit字段的post action方法中声明为无效。如果我省略[Required]注释,那么有人可以为第4个字段创建一个空值的用户。

如何解决这个问题?

create edit

型号代码:

    [Required]
    [DisplayName("User Name")]
    public string UserName { get; set; }

    [Required]
    public string Role { get; set; }

    [Required]
    [DataType(DataType.Date)]
    [DisplayName("Insert Date")]
    public DateTime? InsertDate { get; set; }

    [Required]
    [DisplayName("Active")]
    public bool ActiveInd { get; set; }

控制器代码:

public ActionResult Edit(int id, ZUserRoleModel mod)
    {

        if (ModelState.IsValid)
        {

            // code removed

            return RedirectToAction("Index");
        }
        return View(mod);

    }

3 个答案:

答案 0 :(得分:1)

您可以在编辑模式中隐藏该字段。

@Html.HiddenFor(x => x.EntryDate)

答案 1 :(得分:1)

不确定您是否仍需要答案,但是您需要做什么才能

@Html.HiddenFor(x => x.EntryDate )

工作,将现有模型传递到视图中。因此,我们假设您获取用户数据的操作如下所示。 (你没有提供它,所以我不确定这是否正确)

Public ActionResult GetUser(int UserID)
{
    ZUserRoleModel model = new ZUserRoleModel(UserID); 
    // Maybe this could go to your database and gather user
    // It would populate the correct data into a model object

    return View("Edit", model);
}

通过组合隐藏字段,您的视图将使用现有用户信息填充,隐藏字段将填充数据,并将传递给您的编辑操作。

注意:我在没有任何测试的情况下写了这个,但它仍然有用,或者至少,如果你仍然需要帮助,我希望它指出你正确的方向。

答案 2 :(得分:0)

您可以使用流利验证:http://fluentvalidation.codeplex.com/

有一个类似

的规则
RuleFor(user => user.field4).NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue("action").RawValue <> "edit")