Я довольно новичок в Razor Pages, но я решил, что более простая модель программирования выглядит интересной, и начал изменять мои проекты в соответствии с новым стандартом.
Мне удалось заставить другие страницыправильно работать с OnGet (), OnPost () и их асинхронными версиями, но я получаю странное сообщение об ошибке на другой странице.
Я определил форму, как показано ниже:
<form method="post" id="coursepictures-form" role="form">
<div class="form-row">
<div class="form-group col-lg-2">
<label asp-for="Year" class="form-control-label mb-1 mr-1"></label>
<select asp-for="Year" class="form-control form-control-sm mb-1 mr-3" asp-items="@(new SelectList(Model.YearList))"></select>
</div>
<div class="form-group col-lg-5">
<label asp-for="Event" class="form-control-label mb-1 mr-1"></label>
<select asp-for="Event" class="form-control form-control-sm mb-1 mr-3" asp-items="@(new SelectList(Model.EventList, "Key", "Value"))"></select>
</div>
<div class="form-group col-lg-4">
<label asp-for="Level" class="form-control-label mb-1 mr-1"></label>
<select asp-for="Level" class="form-control form-control-sm mb-1 mr-3" asp-items="@(new SelectList(Model.LevelList, "Key", "Value"))"></select>
</div>
<button>Submit</button>
</div>
</form>
На данный момент я добавил простую кнопку отправки, чтобы попытаться отладить проблему, хотя в конечном итоге я хочу опубликовать эту форму через AJAX.
Я написал несколько версий кода AJAX и вышевсе из которых генерируют правильные данные POST и __RequestVerificationToken, но каждая версия создает одно и то же сообщение об ошибке:
FormatException: Input string was not in a correct format.
System.Number.StringToNumber(ReadOnlySpan<char> str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal)
Отправляемые данные формы отправляются в Chrome DevTools как:
Year: Most Recent
Event: 0
Level: 0
__RequestVerificationToken: CfDJ8KjmorZungdGpmSbOzYJHuJ52QtFEFfYGJDh7JmXIfEl9fDT3tXJUVLBSQzam76NWhoSpZLMk0M5ui6dXO9-YjtZ0shVVHWX-iSRchXO3fGiz3iuPQ1RDmenjLIROTwmxFquJRujgQqee_Ay9OGLX5U
PageModel использует [BindProperties] и содержит строковые поля для получения входящих данных POST следующим образом:
[Display(Name = "Year:")]
public string Year { get; set; }
[Display(Name = "Event:")]
public string Event { get; set; }
[Display(Name = "Level:")]
public string Level { get; set; }
Проблема вызываетсяModel Binder и происходит до запуска метода OnPost ().
Я включу здесь полный текст исключения в случае, если это будет полезно:
System.Number.StringToNumber(ReadOnlySpan<char> str, NumberStyles options, ref NumberBuffer number, NumberFormatInfo info, bool parseDecimal)
System.Number.ParseInt32(ReadOnlySpan<char> s, NumberStyles style, NumberFormatInfo info)
int.Parse(string s, NumberStyles style, IFormatProvider provider)
System.ComponentModel.Int32Converter.FromString(string value, NumberFormatInfo formatInfo)
System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
Microsoft.AspNetCore.Mvc.ModelBinding.Internal.ModelBindingHelper.ConvertSimpleType(object value, Type destinationType, CultureInfo culture)
Microsoft.AspNetCore.Mvc.ModelBinding.Internal.ModelBindingHelper.UnwrapPossibleArrayType(object value, Type destinationType, CultureInfo culture)
Microsoft.AspNetCore.Mvc.ModelBinding.Internal.ModelBindingHelper.ConvertTo(object value, Type type, CultureInfo culture)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder<TKey, TValue>.BindModelAsync(ModelBindingContext bindingContext)
Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, object value)
Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageBinderFactory+<>c__DisplayClass2_0+<<CreatePropertyBinder>g__Bind|0>d.MoveNext()
Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.BindArgumentsCoreAsync()
Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
ShoestringEventing.Startup+<>c+<<Configure>b__5_0>d.MoveNext() in Startup.cs
Я трахалПодумайте об этом в течение некоторого времени и, похоже, никуда не денетесь, так как я сказал, что выполнил миграцию на Razor Pages для других форм, отправленных через Form или AJAX, которые работают, но эта вызывает проблемы.