【问题标题】:Get HTML textfield and use as variable in c# (cshtml)获取 HTML 文本字段并在 c# (cshtml) 中用作变量
【发布时间】:2018-04-09 18:40:57
【问题描述】:

我在 HTML 中有这个输入

<input type="text" placeholder="Username" name="usernameField" id="username" runat="server">

我想获取这个textfield 的值并在cshtmlc# 方法中使用它,我知道我不能使用常规的document.getElementById。我试过HTML agility pack,但据我所知它不能用于此。这样做的目的是,我有两个输入,用户名和密码,用户在其中输入登录信息,它将输入值与数据库中的值进行比较。

我要使用 HTML 元素值的位置在 SQL 语句中,在用户名和密码处:

WHERE username = " + "'" + username + "'" + " AND password = " + "'" + password

这是完整的c# cshtml 方法:

@using System;
@using Npgsql;
@using HtmlAgilityPack;
@functions{

    public Boolean ValidateLogin()
    {        

        NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User Id=postgres;
Password=postgres;Database=login;");
        // Open Database connection.
        conn.Open();

        // Define a query returning a single row result set.
        NpgsqlCommand command = new NpgsqlCommand("SELECT username, password FROM logindata 
WHERE username = " + "'" + username + "'" + " AND password = " + "'" + password + "'" + ";", conn);

        // Execute the query and obtain a result set.
        NpgsqlDataReader dr = command.ExecuteReader();

        // If result exists return true and gain access to the control website.
        if (dr.Read())
        {
            return true;
        }

        // Close Database connection.
        conn.Close();
        return false;
    }
}

更多信息:

  • 我在 Visual Studio 2017 中这样做
  • 我正在使用 asp.net CORE
  • 我正在使用 cshtml 文件(我相信也称为 razor)

【问题讨论】:

  • 文本字段是否有 ASP.NET 名称?它在服务器端运行吗?
  • 没有asp名称,它只是HTML中的普通文本字段,它在客户端运行。

标签: c# html razor


【解决方案1】:

您在此处使用的技术称为 Razor Pages,它是 ASP.NET Core MVC 的一项新功能,它使以页面为中心的场景的编码更加轻松和高效。(Razor Pages docs)

如果您正在寻找有关如何使用模型-视图-控制器方法的信息,请查看here

对于您的问题,您需要一个Login.cshtml 和一个Login.cshtml.cs 文件,如果您右键单击pages 文件夹并选择Add > Razor Page...,它将自动为您创建。

这些文件应包含:

登录.cshtml

@page
@model WebApplication1.Pages.LoginModel

<form method="POST">
    <input type="text" placeholder="Username" asp-for="UserName">
    <input type="password" asp-for="Password">

    <input type="submit" />
</form>

登录.cshtml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages
{
    public class LoginModel : PageModel
    {
        [BindProperty]
        public string UserName { get; set; }

        [BindProperty]
        public string Password { get; set; }

        public bool IsloggedIn { get; private set; }

        public void OnPost()
        {
            NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;User Id=postgres; Password = postgres; Database = login; ");
            // Open Database connection.
            conn.Open();

            // Define a query returning a single row result set.
            NpgsqlCommand command = new NpgsqlCommand("SELECT username, password FROM logindata WHERE username = @username AND password = @password", conn);

            command.Parameters.AddWithValue("@username", UserName);
            command.Parameters.AddWithValue("@password", Password);

            // Execute the query and obtain a result set.
            NpgsqlDataReader dr = command.ExecuteReader();

            // If result exists return true and gain access to the control website.
            if (dr.Read())
            {
                IsloggedIn = true;
            }

            // Close Database connection.
            conn.Close();
        }
    }
}

请注意,我更改了您在查询中使用 usernamepassword 的方式来防止 SQL 注入攻击。

【讨论】:

  • 感谢您的帮助,我已经尝试了您的代码,但我没有收到任何错误,如何测试它是否有效?我可以返回警报或其他内容以查看它是否有效?
  • 不应该在某处调用 OnPost 方法,或者我不应该在按钮上放一些东西,比如“onclick”
  • @daddybig 不,您不需要onclick。单击提交按钮后,OnPost 会自动执行并设置IsloggedIn 值。您可以在cshtml 文件中使用它并检查用户是否已经登录,或者您可以将他重定向到另一个页面。我建议您阅读一下文档以更熟悉这些内容。
  • @daddybig 用户身份验证之类的东西已经在 ASP MVC 中实现,您可以轻松使用它们
  • 我让 OnPost 方法返回 RedirectToPage("google.com"); 但是当我点击提交按钮时,页面更新并且没有任何反应
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2021-09-02
  • 2016-07-22
  • 2011-08-01
相关资源
最近更新 更多