小编Nao*_*omi的帖子

如何使输入字段仅允许使用EF和数据注释的数字?

我试图弄清楚是否有办法确保使用数据注释和实体框架允许仅数字输入.

我使用以下代码

[Required]
[DisplayName("Client No")]
[Column("client_no", TypeName = "smallint")]
public virtual Int16 Number { get; set; }
Run Code Online (Sandbox Code Playgroud)

我希望使用数字类来显示它.

在一个地方我使用以下

<input type="number" name="searchClientNo" class="numericOnly" /><br />
Run Code Online (Sandbox Code Playgroud)

但在我正在使用的报名表中

@Html.EditorFor(m => m.Number, EditorTemplate.TextBox)
Run Code Online (Sandbox Code Playgroud)

我有一个自定义的EditorFor与以下代码

<div class="editor-label">
    @Html.Label((ViewData.ModelMetadata.DisplayName??ViewData.ModelMetadata.PropertyName),
        new Dictionary<string, object>
            {
                { "for", ViewData.ModelMetadata.PropertyName }
            })
</div>
<div class="editor-field">
    @Html.TextBox("", (object)Model,
        new Dictionary<string, object>
            {
                { "id", ViewData.ModelMetadata.PropertyName },
                { "name", ViewData.ModelMetadata.PropertyName },
                { "class", "text-box single-line"},
                { "data-bind", "value: " + ViewData.ModelMetadata.PropertyName },
            })
    @Html.ValidationMessage(ViewData.ModelMetadata.PropertyName,
        new Dictionary<string, object>
            {
                { "data-valmsg-for", ViewData.ModelMetadata.PropertyName …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework data-annotations

6
推荐指数
1
解决办法
2万
查看次数

DataRow 列和字符串值比较

我有以下问题。我将值作为像字符串一样的 XML 传递,并且我没有为数字列传递诸如 false 或 0 之类的默认值。所以,我创建了一个字典,其中键是列名,值是传递的值。

这是我当前的代码

foreach (KeyValuePair<String, String> kvp in rowValues)
     {
        String passedValue = kvp.Value.Trim();
        String rowValue = bookingRow[kvp.Key].ToString().Trim();
        if (passedValue != rowValue)
        {
           // code here
        }
     }
Run Code Online (Sandbox Code Playgroud)

问题在于默认值。我可以通过调试我的测试用例看到passedValue 为空,rowValue 为0(列是整数类型)。所以,我的问题是 - 我应该如何重写上面的代码以正确地将我传递的值转换为列的类型。换句话说,我需要将传递的值转换为正确类型的 DataRow 列,而不是将它们都转换为字符串。

passedValue 的示例 - ""。

rowValue 的示例 = " "(具有列长度的空字符串)

或者另一个例子:

passedValue = "" 的示例

对应的rowValue = 0(表中值为Integer)

两种情况都应视为相同的值 - 无需写入历史记录。

多亏了答案,我现在正在测试这段代码:

String passedValue = kvp.Value.Trim();
        var rowValue = bookingRow[kvp.Key];
        if (Convert.ChangeType(passedValue, rowValue.GetType()) != rowValue)
        {
           String rowValueString = rowValue.ToString().Trim();
           if …
Run Code Online (Sandbox Code Playgroud)

.net c# datarow

1
推荐指数
1
解决办法
3017
查看次数