这个问题似乎在 MVC4 中得到解决,因为我无法重现该问题。我的空文本框都绑定回null
我的模型的可为空的 int、double 或 decimal。没有问题。所以问题可能出在其他地方,或者这可能是 MVC3 中的一个错误,现在不再存在。
也就是说,如果您仍然遇到问题并且无法使用 MVC4,请尝试制作您自己的自定义模型绑定器来完成您需要做的事情。这是十进制的示例:
public class NullableDecimalBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object result = null;
if (valueResult.AttemptedValue.Length > 0) {
try {
// Bonus points: This will bind using the user's current culture.
result = Convert.ToDecimal(valueResult.AttemptedValue, System.Globalization.CultureInfo.CurrentCulture);
} catch (FormatException e) {
modelState.Errors.Add(e);
} catch (InvalidOperationException e) {
modelState.Errors.Add(e);
}
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return result;
}
}
然后,要使用它,将此行添加到您的 Global.asax 中Application_Start
:
ModelBinders.Binders.Add(typeof(decimal?), new NullableDecimalBinder());