【问题标题】:Enum value instead of key in hidden HiddenFor field in Razor view (Asp.Net MVC 5)枚举值而不是 Razor 视图中隐藏的 HiddenFor 字段中的键(Asp.Net MVC 5)
【发布时间】:2015-12-13 22:26:24
【问题描述】:

我尝试使用这个解决方案:

MVC3 HiddenFor with Enum. Input's value is enum key not value?

但是它在 MVC5 Razor 视图中不起作用。我收到此错误:

System.Web.Mvc.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

附加信息:模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。

如何在隐藏字段中获取枚举值而不是枚举键?

枚举类型:

public enum LineType : int
{
    Account = 0,
    Inventory = 1,
    Service = 2
}

在 Razor 视图中,我有:

 @Html.HiddenFor(m => (int)m.LineTypeID)

LineTypeID 是 LineType 类型。

【问题讨论】:

  • 请向我们展示您的代码。
  • 将代码放在问题中,而不是在 cmets 中。
  • 为什么需要int 值?模型绑定适用于文本值,那么这样做的目的是什么?
  • 我需要 int 值在 JavaScript 中进行操作。感谢您的建议,我将尝试更改代码以使用文本值。

标签: c# asp.net-mvc razor enums


【解决方案1】:

你可以这样做

@Html.HiddenFor(m => m.LineTypeID, new {@Value = (int)Model.LineTypeID})

这会覆盖键值

【讨论】:

  • 它对我有用,除了我必须做 (int)Model.LineTypeID 而不是 m。
【解决方案2】:

这里只是为了进一步详细说明答案:

@Html.HiddenFor(m => (int)m.LineTypeID)

这行不通。您不能在模板上投射。当您投射时,它会创建一个新变量,这将不起作用。

删除转换为 int 并按照描述添加 @value 字段。

@Html.HiddenFor(m => m.LineTypeID, new {@Value = (int)m.LineTypeID, id = "LineTypeID"})

我喜欢添加 Id 字段,以便以后可以轻松地访问 JavaScript 中的值:

var lineTypeIDValue = parseInt($("#LineTypeID").val());

同样在 C# 中,您不需要向枚举添加类型。

public enum LineType
{
    Account = 0,
    Inventory = 1,
    Service = 2
}

你现在应该

【讨论】:

  • 不需要手动设置id参数。 MVC 会根据属性名称自动为您执行此操作。
  • 当您开始使用 Javascript 时,有时设置 ID 是有益的。在某些情况下,假设您对 c# 的命名约定是不同的。这方面的一个例子是变量或类的第一个字母的小写和大写。假设您使用的支持的标准约定遵循 MyHiddenForVariable,但在 javascript 中,约定使用 myHiddenForVariable。通过使用 Id 分配,您可以确保您具有匹配的命名约定。当您使用的现有代码可能在后端和前端之间的命名约定有所不同时,这非常有用。
  • 是的,你是对的。直到今天我都在使用 C# 命名对象,因为在 JavaScript 中引用时我使用的是 MVC Helper Html.IdFor(model => model.MyProperty)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
相关资源
最近更新 更多