我正在 Blazor (C#) 服务器端做一个应用程序。如何检查 Register.razor 文件中是否存在公司?公司验证应在用户点击注册按钮时进行。
我尝试添加的函数写在这个文件中。
注册.razor:
@page "/register"
@using TestBlazor.Models
@using TestBlazor.Data
@using Microsoft.Data.SqlClient
<br />
<br />
<h3 class="h3"><b>Register</b></h3>
<br />
<EditForm class="needs-validation" Model="@_user" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit">
<div class="alert @StatusClass">@StatusMessage</div>
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<p><b>User name</b></p>
<input id="username" class="solid" name="username" placeholder="Your username.." @bind-value="_user.UserName" />
<ValidationMessage For="@(() => @_user.UserName)"></ValidationMessage>
</div>
<div class="form-group">
<p><b>Password</b></p>
<input type="password" class="solid" id="password" placeholder="Your password.." @bind-value="_user.Password" />
<ValidationMessage For="@(() => @_user.Password)"></ValidationMessage>
</div>
<div class="form-group">
<p><b>Email</b></p>
<input id="email" class="solid" placeholder="you@example.com" @bind-value="_user.Email" />
<ValidationMessage For="@(() => @_user.Email)"></ValidationMessage>
</div>
<div class="form-group">
<p><b>Company</b></p>
<input id="company" class="solid" placeholder="Your company.." @bind-value="_user.Company" />
<ValidationMessage For="@(() => @_user.Company)"></ValidationMessage>
</div>
<br />
<button disabled="@loading" class="btn btn-primary" onclick="AddUser">
@if (loading)
{
<span class="spinner-border spinner-border-sm mr-1"></span>
<NavLink href="/login" class="btn btn-link">Register</NavLink>
}
Register
</button>
<NavLink href="/login" class="btn btn-link">Login</NavLink>
</EditForm>
@code {
private User _user = new User();
private string StatusMessage;
private string StatusClass;
private bool loading;
private void OnValidSubmit()
{
if (loading == true)
{
Console.WriteLine("You have successfully registered!");
}
else
{
loading = false;
Console.WriteLine("Check your information again!");
}
}
//protected void HandleValidSubmit()
//{
// StatusClass = "alert-info";
// StatusMessage = " You have successfully registered! Please click the Login button to log in!";
@*}*@
private async void HandleValidSubmit()
{
try
{
var _dataContext = new AppDbContext();
_dataContext.User.Add(_user);
await _dataContext.SaveChangesAsync();
}
catch
{
base.StateHasChanged();
}
_user = new User();
//obavještava komponentu da se njezino stanje promijenilo
base.StateHasChanged();
}
protected void HandleInvalidSubmit()
{
StatusClass = "alert-danger";
StatusMessage = " Check your information again!";
}
private Boolean exists(string company)
{
SqlConnection conn = new SqlConnection("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;");
SqlCommand cmd = new SqlCommand("Select Count(*) from Users where Company ='" + company + "'", conn);
SqlDataReader sReader = null;
Int32 numberOfRows = 0;
try
{
conn.Open();
sReader = cmd.ExecuteReader();
while (sReader.Read())
{
if (!(sReader.IsDBNull(0)))
{
numberOfRows = Convert.ToInt32(sReader[0]);
if (numberOfRows > 0)
{
return true;
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
return false;
}
public void IfCompanyExist()
{
var _dataContext = new AppDbContext();
bool companyAlreadyExists = _dataContext.User.Any(x => x.Company == _user.Company);
}
public bool CheckCompany(string company)
{
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = "Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;";
con.Open();
using (SqlCommand cmd = new SqlCommand("select * from Users where Company = company", con))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "company";
param.Value = company;
cmd.Parameters.Add(param);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
return true;
else
return false;
}
}
}
public void IsCheckCompany(string Company)
{
using (var context = new AppDbContext())
{
_user = context.User.Where(a => a.Company.ToLower() == Company.ToLower()).FirstOrDefault();
}
bool status;
if (_user != null)
{
//Already registered
status = false;
}
else
{
//Available to use
status = true;
}
}
}
我尝试了以下功能:
public void IsCheckCompany(string Company)
{
using (var context = new AppDbContext())
{
_user = context.User.Where(a => a.Company.ToLower() == Company.ToLower()).FirstOrDefault();
}
bool status;
if (_user != null)
{
//Already registered
status = false;
}
else
{
//Available to use
status = true;
}
}
public bool CheckCompany(string company)
{
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = "Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;";
con.Open();
using (SqlCommand cmd = new SqlCommand("select * from Users where Company = company", con))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "company";
param.Value = company;
cmd.Parameters.Add(param);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
return true;
else
return false;
}
}
}
private Boolean exists(string company)
{
SqlConnection conn = new SqlConnection("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=testblazor;Integrated Security=True;");
SqlCommand cmd = new SqlCommand("Select Count(*) from Users where Company ='" + company + "'", conn);
SqlDataReader sReader = null;
Int32 numberOfRows = 0;
try
{
conn.Open();
sReader = cmd.ExecuteReader();
while (sReader.Read())
{
if (!(sReader.IsDBNull(0)))
{
numberOfRows = Convert.ToInt32(sReader[0]);
if (numberOfRows > 0)
{
return true;
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
return false;
}
我应该如何调用带参数的函数?我做错了什么?