【问题标题】:force Uppercase using EditorFor Razor view使用 EditorFor Razor 视图强制大写
【发布时间】:2015-04-09 12:24:35
【问题描述】:

试图在通过实体框架向数据库添加记录的视图中强制某些字段中的文本为大写。

我可以在视图 EditorFor 中执行此操作,还是可以在触发 db.SaveChanges() 之前在控制器中轻松执行所有字段?

【问题讨论】:

  • 在控制器中使用ToUpper() 执行此操作,除非用户需要以大写形式查看?
  • 当我执行 db.Travelers.Add(traveler); 时,我可以对所有字符串字段执行此操作吗? db.SaveChanges();还是我必须以不同的方式处理每个字符串字段?
  • 使用这种方法,您必须在每个字段上调用 ​​ToUpper。或者,您可以创建一个作用于传入 POST 模型的自定义过滤器。
  • 谢谢马克.....打算这样做。

标签: asp.net-mvc entity-framework


【解决方案1】:

您可以使用辅助方法遍历 ViewModel 服务器端的属性。

public T ViewModelToUpper<T>(T viewModel) where T : class
{
    foreach (var property in viewModel.GetType().GetProperties())
    {
        var value = property.GetValue(viewModel, null);
        if (value is string)
        {
            property.SetValue(viewModel, value.ToString().ToUpper());
        }
    }

    return viewModel;
}

然后您可以拨打viewModel = ClassName.ViewModelToUpper(viewModel)。现在您不必担心对每个 string 属性都执行此操作,因为无论如何都会发生这种情况。

【讨论】:

    【解决方案2】:

    如果您愿意,可以使用 jQuery 在 UI 中执行此操作。从用户的角度来看,输入并将所有内容都转换为大写有点奇怪(我会检查我的大写锁定)。 Convert to uppercase as user types using javascript

    您的另一个选择,更好的 IMO,是在控制器中执行此操作。您可以在字符串上使用ToUpper()。牢记全球化。

    【讨论】:

    • 此时用户无关紧要,它正在数据库中完成以适应特定的导出格式。
    • 当我执行 db.Travelers.Add(traveler); 时,我可以对所有字符串字段执行此操作吗? db.SaveChanges();还是我必须分别做每个字符串字段? ——
    • 好吧,您可以为 DB 实体创建一个部分类,并在其上放置一个方法来一次处理所有字符串。想一想:'Travelers.Upper()' 经历并做了所有事情。否则,您将单独进行。
    猜你喜欢
    • 2019-11-08
    • 2011-06-04
    • 2016-02-18
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多