0

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

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

我怎样才能解决这个问题?

创造 编辑

型号代码:

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

    }
4

3 回答 3

1

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

@Html.HiddenFor(x => x.EntryDate)
于 2012-07-13T14:03:33.233 回答
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);
}

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

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

于 2013-01-08T19:55:51.147 回答
0

您可以使用 fluentvalidation: http ://fluentvalidation.codeplex.com/

有一个类似的规则

RuleFor(user => user.field4).NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue("action").RawValue <> "edit") 
于 2012-07-13T14:08:45.443 回答