【问题标题】:Required field not present on all pages leading to problems所有页面上都没有必填字段导致问题
【发布时间】:2013-01-09 03:55:51
【问题描述】:

我的 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);

    }

【问题讨论】:

  • 您质疑至少对我来说还不清楚,可以添加一些相关代码并非常简短地解释发生了什么

标签: asp.net-mvc-3 razor


【解决方案1】:

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

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

【讨论】:

  • 我已经尝试过了,但它似乎不起作用。当我在编辑后保存时,没有返回索引页面,没有任何反应。这是因为我在 Edit 方法的 post 操作中有一个 ModelState.IsValid 测试,即使我包含了 HiddenFor 行,它也会返回为 false。
【解决方案2】:

不确定您是否还需要这个问题的答案,但您需要做什么才能获得答案

@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);
}

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

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

【讨论】:

    【解决方案3】:

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

    有一个类似的规则

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2013-11-14
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多