从HtmlHelper DropDownListFor MVC附加到原始选定值的匿名数字

时间:2018-07-18 23:30:23

标签: asp.net-mvc razor html-helper

我有一个MVC剃刀视图,可以捕获用户的信用卡信息。 CC到期日期的month属性绑定到字节数组类型的选择列表。

private static readonly byte[] Months = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
public static SelectList GetMonthsSelectListthis HtmlHelper helper)
    {
        return new SelectList(Months);
    }

months模型属性使用自定义HtmlHelper DropdownlistFor扩展呈现-

@Html.DropDownListForWithDisplayNameAsOptionLabel(x => x.CardExpirationMonth, Html.GetMonthsSelectList(), new { @required = "required" })

这最终会调用标准MVC html.DropDownListFor-

public static IHtmlString DropDownListForWithDisplayNameAsOptionLabel<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel,TProperty>> expression, IEnumerable<SelectListItem> selectListItems, object htmlAttributes = null)
    {
        var modelMetadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
        return helper.DropDownListFor(expression, selectListItems, modelMetadata.GetDisplayName(), htmlAttributes);
    }

回发后,模型联编程序通常会拾取1-12之间选择的值。

但是,偶尔我们发现发送到付款网关的信用卡月份不在1到12之间。而是在实际选择的值后面附加了一个数字,导致交易失败。

例如

  1. 当选择11时11 7 通过
  2. 选择5时5 3 通过
  3. 选择9时9 9 通过

该问题正在生产中发生,并影响了少量的信用卡交易。

在回发调试时,我总是从模型绑定器中找到正确的值。不太了解匿名数字如何附加到原始所选值。

赞赏所有进一步调试问题的指针。

0 个答案:

没有答案