asp.net core 2.0无法发布简单的表单

问题描述 投票:0回答:2

我正在尝试学习Asp.net Core 2.0并按照教程,创建了一个非常简单的表单,只有1个属性,即Customer的名称。我使用断点调试我甚至无法在CreateModel中点击PostAsync方法

CreateModel

public class CreateModel : PageModel
{
    private readonly ApplicationDbContext _db;
    [BindProperty]
    public Customer Customer { get; set; }
    public CreateModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid) return Page();

        _db.Customers.Add(Customer);
        await _db.SaveChangesAsync();
        return RedirectToPage("/");
    }
}

Create.cs.html

@page
@model WebApplication1.Pages.CreateModel
@{
    ViewData["Title"] = "Create";
}

<h2>Create</h2>

<p>Enter your name: </p>

<form method="post">
    <div asp-validation-summary="All"/>
    <div>Name : <input asp-for="Customer.Name"/></div>
    <input type="submit"/>
</form>

@section Scripts{ 
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

顾客

public class Customer
{
    public int Id { get; set; }
    [Required, StringLength(10)]
    public string Name { get; set; }

}

ApplicationDbContext

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions options) : base (options)    { }

    public DbSet<Customer> Customers { get; set; }
}

我的Startup类中的ConfigureServices方法

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options => options.UseInMemoryDatabase("dbname"));
    services.AddMvc();
}

更新

以下是关于GitHub重现问题的完整项目:https://github.com/touseefbsb/aspnet_post

当我输入超过10个字符时,它永远不会在postasync方法中遇到断点,并且页面上也没有任何反应,它应该向我显示UI上的验证错误,但它没有。

当我输入一个小于10个字符的名称并按提交时,它会尝试提交(postasync中的断点被点击)但是它尝试重定向,我得到以下页面的错误:

error stacktrace

完整StackTrace:

Microsoft.AspNetCore.Mvc.Internal.RedirectToPageResultExecutor.Execute(ActionContext context, RedirectToPageResult result)
Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResult(ActionContext context)
Microsoft.AspNetCore.Mvc.ActionResult.ExecuteResultAsync(ActionContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeResultAsync>d__19.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResultFilterAsync>d__24.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeNextResourceFilter>d__22.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
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>d__17.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker+<InvokeAsync>d__15.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Builder.RouterMiddleware+<Invoke>d__4.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+<Invoke>d__7.MoveNext()
c# http-post asp.net-core-2.0 razor-pages
2个回答
0
投票

检查Razor是否为您生成了防伪令牌。

当您提交表单时,必须验证此令牌,如果您的cookie没有预期的,则提交将被拒绝。

更新:

RedirectToPage方法需要页面的完整路径。

当输入错误但由于<div asp-validation-summary="All">缺少关闭</div>而无法显示时,JavaScript会阻止表单提交。


1
投票

我只是克隆了你的应用程序,它工作正常。它根据需要将数据保存在InMemoryDatabase中。你可以在cmd cmd execution中看到结果。

看到另一张照片为断点qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.