У меня есть вид модели:Html.CheckBoxFor TypeConversition Ошибка
public class RegisterModel
{
...
public bool Confirmation{ get; set; }
}
Я использую флажок помощника на мой взгляд:
@model RegisterModel
......
@Html.CheckBoxFor(m => m.Confirmation)
Этот флажок HTML помощник создает:
<input id="Confirmation" name="Confirmation" value="true" type="checkbox">
<input name="Confirmation" value="false" type="hidden">
На Контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (!ModelState.IsValid)
return View(model);
.....
}
Предположим, что некоторые пользователи меняют значения входов на «xxx» и публикуют его. Поэтому модель недействительна и мы возвращаем представление. После этого, Html.CheckBoxFor
дает эту ошибку:
The parameter conversion from type 'System.String' to type 'System.Boolean' failed.
Внутренняя Исключение:
System.FormatException: xxx is not a valid value for Boolean
Когда мы возвращаем вид: Model.Confirmation
значение ложно но Request["Confirmation"]
значение «ххх».
Эта ошибка исходит от ValueProviderResult
класс по методу ConvertSimpleType
. Я думаю, он пытается преобразовать значение Request["Confirmation"]
в значение boolean и дает ошибку.
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Conversion failure is not fatal")]
private static object ConvertSimpleType(CultureInfo culture, object value, Type destinationType)
{
.....
TypeConverter converter = TypeDescriptor.GetConverter(destinationType);
bool canConvertFrom = converter.CanConvertFrom(value.GetType());
if (!canConvertFrom)
{
converter = TypeDescriptor.GetConverter(value.GetType());
}
if (!(canConvertFrom || converter.CanConvertTo(destinationType)))
{
// EnumConverter cannot convert integer, so we verify manually
if (destinationType.IsEnum && value is int)
{
return Enum.ToObject(destinationType, (int)value);
}
string message = String.Format(CultureInfo.CurrentCulture, MvcResources.ValueProviderResult_NoConverterExists,
value.GetType().FullName, destinationType.FullName);
throw new InvalidOperationException(message);
}
.....
}
Как я могу исправить или избежать этой ошибки?
Это странно. Почему «CheckBoxFor» создает два входа с точно таким же именем? –
«Предположим, что некоторые пользователи меняют значения входов на« xxx »и публикуют его». Что ты хочешь этим сказать? Вы имеете в виду, что пользователь меняет источник html? – ataravati
Да @ataravati пользователь меняет источники и сообщения html. –