Asp.net mvc 3 所有页面上不存在导致问题的必填字段

Asp.net mvc 3 所有页面上不存在导致问题的必填字段,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我在MVC3应用程序中有一个“创建”页面,其中有4个输入字段,都是必需的。我还有一个“编辑”页面,可以编辑这4个字段中的3个。我不想显示第四个字段,而是想将其保持在初始值(该字段是创建条目的日期) 我在模型中将第四个字段标记为[Required],这会导致在编辑字段的post action方法中将模型声明为无效。如果我省略了[Required]注释,那么有人可以为这个第四个字段创建一个空值的用户 我怎样才能避开这个问题 型号代码: [Required] [DisplayNam

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

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

我怎样才能避开这个问题

型号代码:

    [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);

    }

可以在编辑模式中将该字段设置为隐藏

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

您可以使用fluentvalidation:

有一个类似于

RuleFor(user => user.field4).NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue("action").RawValue <> "edit") 
RuleFor(user=>user.field4.NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue(“操作”).RawValue“编辑”)

不确定您是否还需要对此问题的答案,但您需要做些什么才能解决此问题

@Html.HiddenFor(x => x.EntryDate )
若要工作,请将现有模型传递到视图中。因此,让我们假设您获取用户数据的操作如下所示。(您没有提供,因此我不确定这是否正确)

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


注意:我没有做任何测试就写了这篇文章,但它应该仍然有效,或者至少,如果您仍然需要帮助,我希望它能为您指明正确的方向。

您提出的问题至少对我来说不清楚,可以添加一些相关的代码,并简要说明发生了什么我尝试过这一点,但似乎不起作用。当我在编辑后保存时,没有返回到索引页,而是什么也没有发生。这是因为我在编辑方法的post操作中有一个ModelState.IsValid测试,即使我包含了HiddenFor行,该测试也返回为false。
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);
}