如何简单地将表单数据从索引页面获取到索引类

时间:2019-05-13 19:06:10

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

我已经创建了一个Razor Web应用程序,并将Identity脚手架放入我的项目中,如下所述:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/add-user-data?view=aspnetcore-2.2&tabs=visual-studio

如下面的代码所示,我在主页上有一个表单,用于显示您是否尚未登录,并且需要将该表单数据转换为一种方法,以便我可以对其进行处理(涉及google -maps api,但我已经弄清楚了那一部分)

  1. 我尝试创建一个描述要捕获的数据的新模型(TestUser),并将其用作此页面的模型,然后在Index.cshtml.cs页面中创建一个将表单数据绑定到该方法的方法模型并将数据写入Debug-但没有任何结果,进一步的测试(在该方法内放置一个断点)表明它甚至从未调用该方法
  2. 我尝试使用HTML POST表单,但无法弄清楚处理该POST的c#代码应该是什么样子

尝试#1

Index.cshtml.cs

            <form asp-action="CheckUser">
                <label for="Email" >Email address</label>
                <input type="email" id="Email" class="form-control" placeholder="Email address" required autofocus>
                <label for="Postcode" class="sr-only">Password</label>
                <input type="text" id="Postcode" class="form-control" placeholder="Postcode" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
            </form>

Index.cshtml

???

尝试#2

Index.cshtml.cs

            <form method="post">
                <label for="Email" >Email address</label>
                <input type="email" id="Email" class="form-control" placeholder="Email address" required autofocus>
                <label for="Postcode" class="sr-only">Password</label>
                <input type="text" id="Postcode" class="form-control" placeholder="Postcode" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
            </form>

Index.cshtml

{{1}}

对于第一次尝试,我期望它编写电子邮件和邮政编码以进行调试,但没有任何显示。

我无法弄清楚HTML POST表单是否足够尝试第二次尝试。

最终目标是从主页上的表单中获取该信息并对其进行处理(例如,将其写入Debug)

2 个答案:

答案 0 :(得分:1)

好吧,您的主要问题是您的输入没有name属性。虽然您可以只向它们添加一个name属性,但是最好使用asp-for来调用taghelper,这些标记除其他功能外还可以为您生成用于绑定的正确名称。

<input asp-for="Email" class="form-control" placeholder="Email address" required autofocus>

帮助者还将填写idtype属性。

除此之外,请勿使用Bind。这是bad idea for a number of different reasons。相反,请使用视图模型,并且如果您只允许编辑EmailPostalCode,则只需将这些属性添加到视图模型类即可。发布后,将发布的视图模型中的值映射到您的实体的实例上(如果创建则为新实例,如果进行编辑则从数据库中刷新)。

答案 1 :(得分:0)

然后应该将那些内容放入包含列表中

    public ActionResult CheckUser([Bind(Include = "Email, Postcode")] TestUser user)
    {