输入字符串的格式不正确。ASP.NET

sin*_*ina 1 c# asp.net asp.net-mvc asp.net-core

Input string was not in a correct format.当我想发布表单时出现错误。\n它甚至没有达到目标操作

\n

但我之前没有这个问题

\n

错误:

\n
FormatException: Input string was not in a correct format.\nSystem.Text.ValueStringBuilder.ThrowFormatError()\nSystem.Text.ValueStringBuilder.AppendFormatHelper(IFormatProvider provider, string format, ParamsArray args)\nstring.FormatHelper(IFormatProvider provider, string format, ParamsArray args)\nstring.Format(IFormatProvider provider, string format, object arg0)\nSystem.ComponentModel.DataAnnotations.ValidationAttribute.FormatErrorMessage(string name)\nSystem.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(object value, ValidationContext validationContext)\nSystem.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(object value, ValidationContext validationContext)\nMicrosoft.AspNetCore.Mvc.DataAnnotations.DataAnnotationsModelValidator.Validate(ModelValidationContext validationContext)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.ValidateNode()\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitSimpleType()\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitImplementation(ref ModelMetadata metadata, ref string key, object model)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(ModelMetadata metadata, string key, object model)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitChildren(IValidationStrategy strategy)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitComplexType(IValidationStrategy defaultStrategy)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitImplementation(ref ModelMetadata metadata, ref string key, object model)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(ModelMetadata metadata, string key, object model)\nMicrosoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)\nMicrosoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator.Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model, ModelMetadata metadata, object container)\nMicrosoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.EnforceBindRequiredAndValidate(ObjectModelValidator baseObjectValidator, ActionContext actionContext, ParameterDescriptor parameter, ModelMetadata metadata, ModelBindingContext modelBindingContext, ModelBindingResult modelBindingResult, object container)\nMicrosoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, object value, object container)\nSystem.Threading.Tasks.ValueTask<TResult>.get_Result()\nSystem.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()\nMicrosoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider+<>c__DisplayClass0_0+<<CreateBinderDelegate>g__Bind|0>d.MoveNext()\nMicrosoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)\nMicrosoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)\nMicrosoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)\nMicrosoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)\nMicrosoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()\nMicrosoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)\nMicrosoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)\nMicrosoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\nMicrosoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\nMicrosoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)\n
Run Code Online (Sandbox Code Playgroud)\n

形式:

\n
@model Project.Models.Product\n\n@{\n    ViewData["Title"] = "Create";\n    Layout = "~/Views/Shared/_AdminLayout.cshtml";\n}\n\n<h1>Add Product</h1>\n\n<hr />\n<div class="row">\n    <form id="CreateForm" asp-action="Create" enctype="multipart/form-data">\n        <div class="col-md-8">\n\n            <div asp-validation-summary="ModelOnly" class="text-danger"></div>\n            <div class="form-group">\n                <label asp-for="Price" class="control-label"></label>\n                <input type="number" name="Price" class="form-control" />\n                <span asp-validation-for="Price" class="text-danger"></span>\n            </div>\n            <div class="form-group">\n                <label asp-for="Name" class="control-label"></label>\n                <input type="text" name="Name" class="form-control" />\n                <span asp-validation-for="Name" class="text-danger"></span>\n            </div>\n            <div class="form-group">\n                <label asp-for="ShortDescription" class="control-label"></label>\n                <textarea name="ShortDescription" class="form-control" id="ShortDescription"></textarea>\n                <span asp-validation-for="ShortDescription" class="text-danger"></span>\n            </div>\n            <div class="form-group">\n                <label asp-for="Description" class="control-label"></label>\n                <textarea name="Description" class="form-control" id="Description"></textarea>\n                <span asp-validation-for="Description" class="text-danger"></span>\n            </div>\n            <div class="form-group">\n                <input type="submit" value="Create" class="btn btn-primary" />\n            </div>\n\n        </div>\n        <div class="col-md-4">\n            <div class="panel panel-primary">\n                <div class="panel-heading">picture</div>\n                <div class="panel-body">\n                    <img id="productimage" class="thumbnail" src="/images/Products/Original/nophoto.jpg" />\n                    <div class="form-group">\n                        <input type="file" name="img" id="uploadimage" onchange="loadFile(event)" />\n                        <span asp-validation-for="ImageName" class="text-danger"></span>\n                    </div>\n                </div>\n            </div>\n\n            <div class="file-upload-wrapper"> \n                <input name="file" id="File" onchange='getFileName()' type="file" class="file-upload-field" value="">\n            </div>          \n            <label id="FileName"></label>\n\n        </div>\n\n\n\n    </form>\n</div>\n\n@section Scripts {\n    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}\n    <script src="https://cdn.ckeditor.com/4.16.2/standard/ckeditor.js"></script>\n    <script>\n\n        function readURL(input) {\n\n            if (input.files && input.files[0]) {\n                var reader = new FileReader();\n\n                reader.onload = function (e) {\n                    $('#productimage').attr('src', e.target.result);\n                }\n\n                reader.readAsDataURL(input.files[0]);\n            }\n        }\n\n        $("#uploadimage").change(function () {\n            readURL(this);\n        });\n        CKEDITOR.replace('Description');\n        CKEDITOR.replace('ShortDescription');\n        function getFileName() {\n            let file = document.getElementById('File');\n\n            let lbl = document.getElementById('FileName');\n            lbl.innerHTML = file.value.replace(/.*(\\/|\\\\)/, '');\n        }\n    </script>\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

模型:

\n
    public class Product\n    {\n        [Key]\n        public int ProductId { get; set; }\n        [Display(Name ="\xd9\x82\xdb\x8c\xd9\x85\xd8\xaa")]\n        [Required(ErrorMessage ="\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]\n\n        public uint Price { get; set; }\n        [Display(Name = "\xd9\x86\xd8\xa7\xd9\x85 \xd9\x85\xd8\xad\xd8\xb5\xd9\x88\xd9\x84")]\n        [Required(ErrorMessage = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]   \n        [MaxLength(50)]\n        public string Name { get; set; }\n        [Display(Name = "\xd8\xaa\xd9\x88\xd8\xb6\xdb\x8c\xd8\xad \xda\xa9\xd9\x88\xd8\xaa\xd8\xa7\xd9\x87")]\n        [Required(ErrorMessage = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]\n        [MaxLength(1500)]\n        public string ShortDescription { get; set; }\n        [Display(Name = "\xd8\xaa\xd9\x88\xd8\xb6\xdb\x8c\xd8\xad \xda\xa9\xd8\xa7\xd9\x85\xd9\x84")]\n        [Required(ErrorMessage = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]\n        public string Description { get; set; }\n        [MaxLength(42)]\n        public string ImageName { get; set; }   \n        [Display(Name = "\xd9\x81\xd8\xa7\xdb\x8c\xd9\x84")]\n        [Required(ErrorMessage = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]\n        [MaxLength(42)]\n        public string File { get; set; } \n        public DateTime Date { get; set; }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

行动:

\n
        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Create([Bind("ProductId,Price,Name,ShortDescription,Description,ImageName,File")] Product product, IFormFile img,IFormFile file)\n        {\n            if (ModelState.IsValid)\n            {\n                if (file==null)\n                {\n                    ViewBag.Error = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 \xd9\x81\xd8\xa7\xdb\x8c\xd9\x84 \xd8\xb1\xd8\xa7 \xd8\xa7\xd8\xb6\xd8\xa7\xd9\x81\xd9\x87 \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf";\n                    return View(product);\n\n                }\n                product.Date = DateTime.Now;\n                product.ImageName = "nophoto.jpg";\n                if (img != null && img.IsImage())\n                {\n                    product.ImageName = Guid.NewGuid().ToString() + Path.GetExtension(img.FileName);\n                    string savePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images/Products/Original", product.ImageName);\n\n                    using (var stream = new FileStream(savePath, FileMode.Create))\n                    {\n                        img.CopyTo(stream);\n                    }\n\n                    ImageConvertor imgResizer = new ImageConvertor();\n                    string thumbPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images/Products/Thumb", product.ImageName);\n\n                    imgResizer.Image_resize(savePath, thumbPath, 150);\n                }\n                _context.Add(product);\n                await _context.SaveChangesAsync();\n                return RedirectToAction(nameof(Index));\n            }\n            return View(product);\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

Seb*_*ens 5

ValidationAttribute.FormatErrorMessage()正在投掷Input string was not in a correct format错误。

\n

这是因为您的模型中存在错误消息。例如[Required(ErrorMessage = "\xd9\x84\xd8\xb7\xd9\x81\xd8\xa7 {\xdb\xb0} \xd8\xb1\xd8\xa7 \xd9\x88\xd8\xa7\xd8\xb1\xd8\xaf \xda\xa9\xd9\x86\xdb\x8c\xd8\xaf")]

\n

该错误是因为{}. 它在 C# 中具有特殊含义。所以你必须使用转义字符。

\n

例子:(ErrorMessage = "Your characters should be in: !#$%&()*+,-./:;<=>?@[]^_{{|}}~"

\n

所以为了转义{,你必须使用 double{

\n