首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心MVC post表单数据没有使用身份登录模型进行绑定?

ASP.NET核心MVC post表单数据没有使用身份登录模型进行绑定?
EN

Stack Overflow用户
提问于 2019-07-03 00:56:28
回答 1查看 347关注 0票数 0

我正在使用带有身份的ASP.NET核心MVC,但是我想在登录时执行我自己的逻辑。所以,我所做的就是搭建了登录页面,并进行了自己的设计。

这是我的表格:

代码语言:javascript
复制
@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" />
}

现在,我想将登录数据发送到我自己的控制器操作。但它在我的操作方法上得到了null。参数不是用表单的实际数据填充的。

下面是我的控制器方法:

代码语言:javascript
复制
[HttpPost]
public IActionResult Login(LoginModel.InputModel model)
{
    //My logic
    return View();
}

为什么会以null形式获取模型参数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 01:30:12

好吧,具体地说,它为空的原因是,在Razor Page中,所有输入名称都以Input.开头,因为对于代码隐藏,绑定到的模型是LoginModel,这些输入中的数据将绑定到InputModel属性(Input)。但是,在您的控制器中,您直接绑定到InputModel,并且InputModel没有Input成员。因此,所有已发布的输入都不匹配任何内容,因此没有绑定。

如果你打算在Razor页面上发布,你需要在Razor页面上进行。Razor Pages和MVC之间有太多的不一致之处,无法正确排列所有内容。如果你想使用一个控制器,你需要一个专门为它设计的视图,而不是你的Razor Page。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56857075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档