成员表达式无法从可为空的十进制转换为对象

2024-02-14

我正在开发一个 MVC 项目,并希望向 Html.TextboxFor 方法传递属性名称。这是我的视图模型

public class RuleViewModel<T> where T : class, IValidatableObject
{
    private T _rule;
    public T RuleModel
    {
        get
        {
            return _rule
                ?? (_rule = Activator.CreateInstance<T>());
        }
    }

    public RuleMetadata Metadata { get; set; }

    public Expression<Func<RuleViewModel<T>, Object>> GetParameterByName(PropertyInfo pi)
    {
        var fieldName = Expression.Parameter(typeof(RuleViewModel<T>), "x");
        var fieldExpression = Expression.PropertyOrField(Expression.Property(fieldName, "RuleModel"), pi.Name);
        var exp = Expression.Lambda<Func<RuleViewModel<T>, Object>>(fieldExpression, fieldName);
        return exp;
    }

}

然后在视图中我这样做

  @foreach (var prop in Model.RuleModel.GetType().GetProperties())
    {
        var result = Model.Metadata.Columns.SingleOrDefault(m => m.ColumnName == prop.Name);
        if (result != null)
        {
            <td>
                @Html.TextBoxFor(Model.GetParameterByName(prop))
            </td>
        }
    }

问题是,当属性的类型为decimal?时,我收到无法将可为空的十进制转换为对象错误。我环顾四周,发现您可以使用 Expression.Convert 来解决此问题,但是当我这样做时,视图上出现错误

模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用。

任何帮助,将不胜感激。这是我正在开展的一个概念验证项目,如果没有这件作品,它就会死在水中。


问题是你不能只使用object as TProperty打电话时TextBoxFor<TModel, TProperty>()。它需要以下形式的 lambda 表达式Func<TModel, TProperty>,C# 的方差规则是这样的Func<TModel, decimal?>赋值不兼容Func<TModel, object>。你也不能简单地使用Convert(),因为 MVC 内部不会接受主体是 a 的 lambdaConvert表达。

你什么can要做的是使用动态绑定来调用TextBoxFor<TModel, TProperty>()使用正确的类型参数:

public Expression GetParameterByName(PropertyInfo pi)
{
    var fieldName = Expression.Parameter(typeof(RuleViewModel<T>), "x");
    var fieldExpression = Expression.PropertyOrField(
        Expression.Property(fieldName, "RuleModel"),
        pi.Name);
    var exp = Expression.Lambda(
        typeof(Func<,>).MakeGenericType(typeof(RuleViewModel<T>), fieldExpression.Type),
        fieldExpression,
        fieldName);
    return exp;
}

// ...

@InputExtensions.TextBoxFor(Html, (dynamic)Model.GetParameterByName(prop))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

成员表达式无法从可为空的十进制转换为对象 的相关文章

  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • ASP.NET Web 应用程序中的身份验证遇到问题

    我正在尝试对从登录页面登录我的 Web 应用程序的用户进行身份验证 我正在使用本教程 http support microsoft com kb 301240作为指南 它几乎准确地解释了我希望做什么 但是当我输入用户名和密码时 验证不起作用
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问
  • valgrind 在 Raspberry Pi 上返回未处理的指令

    我最近一直在尝试在运行 Debian GNU Linux7 0 喘息 的树莓派 型号 b 上使用 valgrind 来调试分段错误 每次我在编译的 C 程序上运行 valgrind 时 都会得到类似以下内容的信息 disInstr arm
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • Mac apache localhost 给出 403 Forbidden

    我正在尝试在我的新 mac OSX 10 9 上设置本地环境 我知道它已经安装了apache 所以我一直在使用它 无论我如何设置 httpd vhosts conf hosts httpd conf 文件 在浏览器上访问 localhost
  • VS Code 接受有关输入不起作用的建议

    Normally pressing enter accepts a suggestion on intellisense but when I press enter it does not accept the suggestion an
  • 是否可以在 socket.io 中使用 UDP?

    我正在开发一款游戏 听说 UDP 更适合实时游戏 我知道 socket io 使用 TCP 并且想知道是否有某种方法可以将其切换到 UDP 我尝试查找它 但只找到了 2012 年左右的帖子 其中说 UDP 仅在浏览器中处于实验阶段 从标准浏
  • xvfb(带有 Mesa 19.2)与 Vulkan 兼容吗?

    我正在尝试在无头 Ubuntu 19 10 虚拟机上运行基于 Vulkan 的图形应用程序 通过xvfb https en wikipedia org wiki Xvfb 从裸露的 Ubuntu 19 10 映像开始 使用创建lxc htt
  • 摆脱 NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE?

    我越来越NP NULL ON SOME PATH FROM RETURN VALUE在这个片段中 final Integer id Ints tryParse idString FailReason NO SUCH THING checkC
  • 协方差胜过具体类型?

    老实说 我问过 这个问题的一部分 here https stackoverflow com questions 9335278 covariance in different fw causes code break但现在我有一个不同的相关
  • 避免在数据表中呈现“表中没有可用数据”

    我正在使用 JQuery 数据表 当表格呈现时 它显示为 表格中没有可用数据 一段时间后表格开始显示数据 并且 没有可用数据 消失 我不希望出现 没有可用数据 相反 如果出现 正在加载 或 请稍候 之类的内容 那就太好了 或者没有任何东西可
  • 当鼠标离开JQuery时停止.hover动画

    我有类似的东西 test hover function this animate function this animate 但如果用户的鼠标在动画结束之前离开 动画将继续 如果我快速重复地快速悬停和取消悬停元素 则动画会在鼠标离开元素后重
  • 从 3 个点检索正角或负角

    我正在围绕二维空间中的中心点旋转点 这些点是中心点 旧鼠标位置和新鼠标位置 我的旋转功能运行良好 我可以完美地计算角度 但如果用户沿应解释为逆时针方向移动鼠标 我想计算负角度 例如 如果您位于 小于 中心点的 y 值之上 小于 则向右 正
  • window、window.top 和 window.parent 之间有什么区别?

    我刚刚注意到top window and parent变量给了我相同的值 我正在 gmail 收件箱页面对此进行测试 有人知道这三个值有什么区别吗 如果您在框架内 window指当前帧 parent指的是当前框架的父级 top指最外层框架
  • 元音子序列

    我在准备面试时在网站上发现了这个问题 字符串的神奇子序列S是一个子序列S那 按顺序包含所有五个元音 查找字符串的最大神奇子序列的长度S 例如 如果S aeeiooua then aeiou and aeeioou是神奇的子序列 但aeio
  • 将 TIMESTAMP 列更新为可为空

    我有一个表存在于两个数据库中 在一个数据库中有一个表 其中有一列称为ROW VERSION这是类型TIMESTAMP NOT NULL 在第二个数据库中 同一个表具有相同类型的列TIMESTAMP但它是类型TIMESTAMP NULL 我想
  • 活动图 定时事件

    我正在尝试建模以下内容 填写提交表单时 系统每 5 分钟自动保存一次用户进度 这是我尝试过的 但我认为这是不正确的 就我而言 仅在 填写提交 活动完成后才会询问条件 另外 我不想表明用户正在再次开始 填写提交 活动 您将使用由虚线框表示的可
  • 具有多个连接的 ActiveRecord 查询无法识别关系

    我正在尝试编写一个 ActiveRecord 查询 使用以下查询返回注册特定课程的所有学生 def self students enrolled in course id Student joins enrollments joins se
  • .net 控制台应用程序 32 位与 64 位

    NET 中的应用程序是否需要构建为 64 位才能充分利用具有 64 位操作系统的计算机 或者它是否会像 32 位构建一样利用它 基本上 我们遇到了内存不足异常的问题 建议在 64 位机器上运行控制台应用程序 这 可能 解决该问题 问题是我们
  • 使用 Spring Security + Spring data + MongoDB 进行身份验证

    我想将 Spring security 与 MongoDB 结合使用 使用 Spring 数据 并从我自己的数据库中检索用户以实现 spring security 但是 我不能这样做 因为我的用户服务类型似乎不受支持 这是我的 UserSe
  • pip (python2) 和 pip3 (python3) 可以共存吗?

    我一直认为 pip 适用于 Python 2 pip3 适用于 Python 3 为了安装不同版本的 pip 我执行了以下操作 sudo apt get install python pip sudo apt get install pyt
  • PHP json_decode 有单引号问题,但没有双引号问题

    通过示例最容易解释 var dump json decode a b c d e f NULL var dump json decode a b c d e f array 3 0 gt object stdClass 1 1 a gt s
  • 如何在svg中动态设置坐标点

    我正在尝试使用 SVG 创建一个三角形 我这样做是按照tutorial http tutorials jenkov com svg polygon element html 但问题是坐标是硬编码的 在画布中 我通过从 javascript
  • 成员表达式无法从可为空的十进制转换为对象

    我正在开发一个 MVC 项目 并希望向 Html TextboxFor 方法传递属性名称 这是我的视图模型 public class RuleViewModel