C# 验证和显示来自Xamarin.Forms的数据库信息
我开始学习如何使用Xamarin.Forms进行应用程序开发。我正在制作一个简单的应用程序,它只包含一个注册、登录和一个页面,在您登录时显示相应的信息 然而,到目前为止,我遇到了一些问题,主要是数据验证。为什么它在XAML中如此复杂?在HTML中,您可以只设置属性“required”,而我所看到的XF的每一个解决方案都声称是“简单”的,有时包含数百行代码 在数据验证之后,我还想确保如果已经有用户使用该电子邮件地址注册,应用程序不会让我保存信息。最后,我想在用户登录后输出他们的信息 我的应用程序由3个视图组成:登录页面、登录页面和主页。成功验证后,用户将被带到主页 我使用SQLite处理DB,使用一个表RegUserTable.cs 这是RegistrationPage.xaml.csC# 验证和显示来自Xamarin.Forms的数据库信息,c#,sqlite,xamarin,xamarin.forms,C#,Sqlite,Xamarin,Xamarin.forms,我开始学习如何使用Xamarin.Forms进行应用程序开发。我正在制作一个简单的应用程序,它只包含一个注册、登录和一个页面,在您登录时显示相应的信息 然而,到目前为止,我遇到了一些问题,主要是数据验证。为什么它在XAML中如此复杂?在HTML中,您可以只设置属性“required”,而我所看到的XF的每一个解决方案都声称是“简单”的,有时包含数百行代码 在数据验证之后,我还想确保如果已经有用户使用该电子邮件地址注册,应用程序不会让我保存信息。最后,我想在用户登录后输出他们的信息 我的应用程序由
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using SQLite;
using System.Text;
using System.Threading.Tasks;
using UNEDProFinal.Tables;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace UNEDProFinal.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class RegistrationPage : ContentPage
{
public RegistrationPage()
{
InitializeComponent();
}
void Handle_Clicked(object sender, EventArgs e)
{
var dbpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "UserDatabase.db");
var db = new SQLiteConnection(dbpath);
db.CreateTable<RegUserTables>();
var ChosenDate = EntryUserDOB.ToString();
if (EntryUserPassword.Text != ConfirmEntryUserPassword.Text)
{
Device.BeginInvokeOnMainThread(async () =>
{
var passError = await this.DisplayAlert("Las contraseñas no concuerdan", "Error", "Intentarlo de Nuevo", "Salir");
if (passError)
await Navigation.PushAsync(new RegistrationPage());
else
{
await Navigation.PushAsync(new LoginPage());
}
});
}
else
{
var item = new RegUserTables()
{
UserName = EntryUserName.Text,
Password = EntryUserPassword.Text,
Email = EntryUserEmail.Text,
PhoneNumber = EntryUserPhoneNumber.Text,
UserFirstSurname = EntryUserFirstSurname.Text,
UserLastSurname = EntryUserLastSurname.Text,
UserDOB = ChosenDate
};
db.Insert(item);
Device.BeginInvokeOnMainThread(async () =>
{
var result = await this.DisplayAlert("Felicidades", "Usuario Registrado", "Continuar", "Salir");
if (result)
await Navigation.PushAsync(new LoginPage());
});
}
}
}
}
我还想知道…根据我目前保存信息的逻辑,数据库是否真的将输入的信息与特定用户关联?或者它只是抛出随机信息
我想找到一种简单的方法来验证中的信息
xamarin.forms
您可以通过在Xamarin.forms中使用来编写自己的验证。例如:
public class PasswordValidationBehavior : Behavior<Entry>
{
const string passwordRegex = @"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";
protected override void OnAttachedTo(Entry bindable)
{
bindable.TextChanged += HandleTextChanged;
base.OnAttachedTo(bindable);
}
void HandleTextChanged(object sender, TextChangedEventArgs e)
{
bool IsValid = false;
IsValid = (Regex.IsMatch(e.NewTextValue, passwordRegex));
((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red;
}
protected override void OnDetachingFrom(Entry bindable)
{
bindable.TextChanged -= HandleTextChanged;
base.OnDetachingFrom(bindable);
}
}
以下是一些你可以阅读的博客:和
我想找到一种方法,将保存的信息显示在
应用程序
由于您已将信息保存在本地数据库中,因此您可以通过特定的用户ID从数据库中查询个人信息,然后使用或其他您想要的方式在页面中显示这些信息。请随便问我任何问题
请参阅:您可以使用
[必需]
属性。你真正的问题是什么?@Jason这里有两个非常明确的问题:我想找到一种简单的方法来验证xamarin.forms中的信息,我想找到一种方法在应用程序的页面中显示保存的信息。无意冒犯,但是,如果验证的解决方案有7个步骤,那可能不是我想要的。谢谢。我可以在设置中使用数据绑定吗?我不认为我遵循的教程使用的是数据绑定,所以我担心必须从头开始。此外,验证是否也适用于检查,例如,数据库中是否已经存在给定的电子邮件,如果是这种情况,则不允许其存储?@Dasphillipbrau您可以使用数据绑定和设置来显示/更新值。遵循同样是学习Xamarin.Forms的好方法。在将值存储到数据库之前,应始终验证该值。若它已经存在,当您阅读它并发现它无效时,您可以要求用户更新它,然后在您的本地数据库中更新它。
using System;
namespace UNEDProFinal.Tables
{
public class RegUserTables
{
public Guid UserId { get; set; }
public string UserName { get; set; }
public string UserFirstSurname { get; set; }
public string UserLastSurname { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string UserDOB { get; set; }
}
}
public class PasswordValidationBehavior : Behavior<Entry>
{
const string passwordRegex = @"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";
protected override void OnAttachedTo(Entry bindable)
{
bindable.TextChanged += HandleTextChanged;
base.OnAttachedTo(bindable);
}
void HandleTextChanged(object sender, TextChangedEventArgs e)
{
bool IsValid = false;
IsValid = (Regex.IsMatch(e.NewTextValue, passwordRegex));
((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red;
}
protected override void OnDetachingFrom(Entry bindable)
{
bindable.TextChanged -= HandleTextChanged;
base.OnDetachingFrom(bindable);
}
}
<Entry Placeholder="Enter a PassWord">
<Entry.Behaviors>
<local:PasswordValidationBehavior />
</Entry.Behaviors>
</Entry>