ASP.NET Core MVC POST DATA不使用Identity LoginModel绑定



我正在使用具有身份的ASP.NET Core MVC,但我想在登录时执行自己的逻辑。因此,我所做的是我踩下了登录页面并制作自己的设计。

这是我的形式:

@page
@model LoginModel
@{
    ViewData["Title"] = "Login";
}
<div class="login-page cnt-bg-photo overview-bgi" style="background-image: 
 url('@Url.Content("~/assets/img/banner-1.jpg")')">
    <div class="container">
        <div class="row">
            <div class="col-lg-12">
                <div class="forgot-box contact-2 clearfix">
                    <div class="login-header clearfix">
                        <div class="pull-left">
                            <h4>Login</h4>
                        </div>
                    </div>
                    <!--                            <div role="alert" 
class="alert alert-danger font-12">
                                                    <strong>Oops!!</strong> Invalid Email or Password
                                                </div>-->
                    <p>Please enter your user name and password to login</p>
                    <form action="/Account/Login" method="POST">
                        <div class="form-group">
                            <label asp-for="Input.Email"></label>
                            <input asp-for="Input.Email" class="form-control" />
                            <span asp-validation-for="Input.Email" class="text-danger"></span>
                        </div>
                        <div class="form-group">
                            <label asp-for="Input.Password"></label>
                            <input asp-for="Input.Password" class="form-control" />
                            <span asp-validation-for="Input.Password" class="text-danger"></span>
                        </div>
                        <div class="form-group w-46-f float-left">
                            <div class="form-check checkbox-theme pull-left">
                                <div class="checkbox">
                                    <label asp-for="Input.RememberMe">
                                        <input asp-for="Input.RememberMe" />
                                        @Html.DisplayNameFor(m => m.Input.RememberMe)
                                    </label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group  float-right">
                            <label class="pull-right forgotpassword-label"><a href="#">Forgot Password ?</a></label>
                        </div>
                        <div class="clearfix"></div>
                        <button type="submit" class="btn btn-color btn-md pull-right">Login</button>
                    </form>
                    <div class="clearfix"></div>
                    <div class="text-center p-t-46 p-b-20 font-14">
                        <span class="txt2">
                            Or Login with
                        </span>
                    </div>
                    <div class="login100-form-social flex-c-m">
                        <form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post">
                            @foreach (var provider in Model.ExternalLogins)
                            {
                                if (provider.DisplayName == "Google")
                                {
                                    <button type="submit" class="btn login100-form-social-item flex-c-m bg3 m-r-5" style="display: inline-block" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account"><i class="fab fa-google"></i></button>
                                }
                                else if (provider.DisplayName == "Facebook")
                                {
                                    <button type="submit" class="btn login100-form-social-item flex-c-m bg1 m-r-5" style="display: inline-block" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account"> <i class="fab fa-facebook-f"></i></button>
                                }
                                else if (provider.DisplayName == "Twitter")
                                {
                                    <button type="submit" class="btn login100-form-social-item flex-c-m bg2 m-r-5" style="display: inline-block" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account"> <i class="fab fa-twitter"></i></button>
                                }
                            }
                        </form>
                    </div>
                    <hr>
                    <div class="text-center forgotpassword-label font-14">
                        Not a member?
                        <a href="@Url.Action("Packages","Account")">
                            <strong>Sign up now</strong>
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

现在,我想将登录数据发布到我自己的控制器操作中。但这对我的动作方法无效。参数没有填充表单的实际数据。

这是我的控制器方法:

[HttpPost]
public IActionResult Login(LoginModel.InputModel model)
{
    //My logic
    return View();
}

为什么它将模型参数作为null

好吧,具体来说,它的源为null的源是在剃须刀页面中,所有输入名称均以 Input.开头LoginModel和这些输入中的数据将绑定到那里的InputModel属性(Input(。但是,在控制器中,您直接绑定到InputModel,而InputModel没有Input成员。结果,张贴的输入都不匹配任何内容,因此不限制。

如果您要从剃须刀页面发布,则需要将其执行到剃须刀页面。Razor页面和MVC之间的不一致性太多,无法正确排列所有内容。如果您想使用控制器,则需要专门针对此的视图,而不是您的剃须刀页面。

相关内容

  • 没有找到相关文章