【问题标题】:How to add a Value to Model State while there is already a key for that? MVC3如何在已有密钥的情况下向模型状态添加值? MVC3
【发布时间】:2013-06-07 08:25:23
【问题描述】:

早安,晚安或晚安

我想知道如何向 ModelState 中的现有键添加值。这是我所做的:

[HttpPost]
    public ActionResult Create(VM_RoleGroup vm_roleGroup)
    {
        RoleGroup roleGroups = Mapper.Map<VM_RoleGroup, MAHAL_E_MA_Model.POCO.RoleGroup>(vm_roleGroup);
        roleGroups.ModifiedDate = UtilityHands.GeneralTools.ConvertToShamsi(DateTime.Now);
        roleGroups.Description = vm_roleGroup.Description ?? MAHAL_E_MA_Proj.ApplicationResources.GeneralResource.NoDescription;

        **if (ModelState.ContainsKey("ModifiedDate") && ModelState["ModifiedDate"].Value == null)
        {
            ModelState["ModifiedDate"].Value = new ValueProviderResult("", roleGroups.ModifiedDate, CultureInfo.CurrentUICulture);    
        }
        else if (!ModelState.ContainsKey("ModifiedDate"))
        {
            ModelState.Add("ModifiedDate", new ModelState { Value = new ValueProviderResult("", roleGroups.ModifiedDate, CultureInfo.CurrentUICulture) });
        }**

        if (ModelState.IsValid)
        {
            unitOfWork.RoleGroupRepository.InsertData(roleGroups);
            unitOfWork.RoleGroupRepository.Save();
            return RedirectToAction("Index");
        }

        return View(vm_roleGroup);
    }

但 ModelState 仍然无效,因为它缺少名为“ModifiedDate”的键的值。请记住,该值不是由用户在客户端设置的。它需要以编程方式设置。顺便说一句,“ModifiedDate”是数据库中的必填字段。

有什么想法吗?提前致谢

【问题讨论】:

  • 视图模型是否包含 ModifiedDate 字段?如果模型状态不包含密钥,为什么它会被认为是无效的?
  • @user1778606:是的,ViewModel 包含该属性。实际上,ModelState 有键,但没有属于它的值。实际上,我没有将 ModifiedDate 从视图传递给控制器​​,因为用户不对此负责。但现在我认为我需要这样做并将 Date 作为 HiddenField 或类似的东西传递。你不这么认为吗?
  • 我认为这是解决问题的最简单方法。当它返回服务器时,只需覆盖修改日期

标签: c# asp.net-mvc-3 modelstate


【解决方案1】:

您应该将 ModifiedDate 作为视图模型的一部分传递,然后在控制器中将其覆盖为 DateTime.Today。

即。预填充视图

@Html.Hidden(Model.ModifiedDate,DateTime.Today);

由于这不安全,请在控制器中覆盖它

roleGroups.ModifiedDate = DateTime.Today;

或者如果它是整个应用程序(在所有模型上)的通用字段,您实际上可以在映射器中添加自定义代码来执行此操作,但我不确定具体情况。

【讨论】:

  • 听起来不错!我会尝试一下,然后返回结果。谢谢你..
  • 我完全按照您为视图建议的代码编写了代码。它会导致错误(与“Model.ModifiedDate”相关):“该值不能为空”。这是正确的,因为还没有插入数据,所以我们只有空值。然后,我省略了“DateTime.Today”,所以它工作正常并显示了“创建”视图。但是就像按下“保存”按钮一样,就好像没有发帖一样。我不知道为什么!无论如何..出于我的兴趣,我决定忽略“ModelState.IsValid”并编写了一些自定义验证:(
  • 嗯,我不知道,使用模型状态通常是一种有效的方法(更少的代码和更少的维护)。祝你好运
猜你喜欢
  • 2017-08-08
  • 2013-11-20
  • 2013-09-12
  • 2011-04-18
  • 2011-08-28
  • 2022-08-24
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多