我有一个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之间。而是在实际选择的值后面附加了一个数字,导致交易失败。
例如
该问题正在生产中发生,并影响了少量的信用卡交易。
在回发调试时,我总是从模型绑定器中找到正确的值。不太了解匿名数字如何附加到原始所选值。
赞赏所有进一步调试问题的指针。