Asp.net Core不绑定模型

时间:2018-09-01 12:17:38

标签: c# asp.net asp.net-mvc asp.net-core-mvc

我是asp.net的新手,我对表格有疑问。我的动作功能无法捕获数据。我所有的数据都是null,我无法解决。

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace Blog.Models
{
public class RegisterViewModel
{
    [Required]
    public string UserName { get; set; }
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Required]
    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    [Required]
    public string FullName { get; set; }
    [Required]
    [DataType(DataType.Date)]
    public DateTime BirthDate { get; set; }
}
}

我的cshtml文件

 <form asp-action="Register" method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="UserName" class="control-label"></label>
            <input asp-for="UserName" class="form-control" />
            <span asp-validation-for="UserName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Password" class="control-label"></label>
            <input asp-for="Password" type="password" class="form-control" />
            <span asp-validation-for="Password" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="ConfirmPassword" class="control-label"></label>
            <input asp-for="ConfirmPassword" type="password" class="form-control" />
            <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Email" class="control-label"></label>
            <input asp-for="Email" class="form-control" />
            <span asp-validation-for="Email" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="FullName" class="control-label"></label>
            <input asp-for="FullName" class="form-control" />
            <span asp-validation-for="FullName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="BirthDate" class="control-label"></label>
            <input asp-for="BirthDate" type="date" class="form-control" />
            <span asp-validation-for="BirthDate" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>

我的Startup.cs

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder();
        builder.SetBasePath(env.ContentRootPath);
        builder.AddJsonFile("appsettings.json");
        config = builder.Build();
    }
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<AppDbContext>(options => options.UseSqlite("Data Source=blog.db"));

        services.AddMvc();

        services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");

        services.AddIdentity<MyIdentityUser, IdentityRole>()
            .AddEntityFrameworkStores<AppDbContext>()
            .AddDefaultTokenProviders();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
        app.UseMvcWithDefaultRoute();
        //app.UseMvc(routes =>
        //{
        //    routes.MapRoute(
        //        name: "default",
        //        template: "{controller=Account}/{action=Index}/{id?}");
        //});
        app.UseAuthentication();
        app.UseDeveloperExceptionPage();
        app.UseStaticFiles();
        //app.UseIdentity();
    }

和我的控制器类

public class AccountController : Controller
{
    private readonly UserManager<MyIdentityUser> userManager;
    private readonly SignInManager<MyIdentityUser> loginManager;
    private readonly RoleManager<IdentityRole> roleManager;


    public AccountController(UserManager<MyIdentityUser> userManager,
       SignInManager<MyIdentityUser> loginManager,
       RoleManager<IdentityRole> roleManager)
    {
        this.userManager = userManager;
        this.loginManager = loginManager;
        this.roleManager = roleManager;
    }

    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Register()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Register(RegisterViewModel obj)
    {
        // fields of obj is null here(Username,Password...)
        if (ModelState.IsValid)
        {
            somethings
        }
        return View(obj);
    }

以下代码是页面的来源

<h2>Register</h2>

<h4>RegisterViewModel</h4>
<hr />
<div class="row">
<div class="col-md-4">
    <form asp-action="Register" method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger">      </div>
        <div class="form-group">
            <label asp-for="UserName" class="control-label"></label>
            <input asp-for="UserName" class="form-control" />
            <span asp-validation-for="UserName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Password" class="control-label"></label>
            <input asp-for="Password" type="password" class="form-control" />
            <span asp-validation-for="Password" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="ConfirmPassword" class="control-label"></label>
            <input asp-for="ConfirmPassword" type="password" class="form-control" />
            <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Email" class="control-label"></label>
            <input asp-for="Email" class="form-control" />
            <span asp-validation-for="Email" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="FullName" class="control-label"></label>
            <input asp-for="FullName" class="form-control" />
            <span asp-validation-for="FullName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="BirthDate" class="control-label"></label>
            <input asp-for="BirthDate" type="date" class="form-control" />
            <span asp-validation-for="BirthDate" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>
</div>
</div>

<div>
<a asp-action="Index">Back to List</a>
</div>

0 个答案:

没有答案