私はCapstoneコース用にUWPモバイルアプリケーションを開発しています。現時点では、Azure SQLデータベースに保存されたテーブルにユーザを認証するためのコードが書かれています。私が必要とするのは、ユーザー名をアプリケーションの他の部分に表示するか、データベースを検索してそのユーザー名で物事だけをプルするために使用できるものに入力されたユーザー名を保存することです。C# - UWP - ログイン画面に入力するとユーザー名を保存します
私はセッションクラスに関していくつかのブログなどを見てきましたが、ここでそれを使用しているようです。他の助けがあれば幸いです。 SQL Serverを使用していないため、App.Xaml.cs.に接続文字列があります。
public static MobileServiceClient MobileService = new
MobileServiceClient("http://tale-webapp.azurewebsites.net");
私の現在のログインページが以下の通りです:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public int IsAuth { get; set; }
//[DataTable("User_Cred")]
public class User_Cred
{
public string id { get; set; }
public string userName { get; set; }
public string Password { get; set; }
}
private IMobileServiceSyncTable<User_Cred> todoGetTable = App.MobileService.GetSyncTable<User_Cred>();
private async Task InitLocalStoreAsync()
{
if (!App.MobileService.SyncContext.IsInitialized)
{
var store = new MobileServiceSQLiteStore("Tale-DB");
store.DefineTable<User_Cred>();
await App.MobileService.SyncContext.InitializeAsync(store);
}
await SyncAsync();
}
private async Task SyncAsync()
{
await App.MobileService.SyncContext.PushAsync();
await todoGetTable.PullAsync("User_Cred", todoGetTable.CreateQuery());
}
async public void submitAuthBtn_Click(object sender, RoutedEventArgs e)
{
await InitLocalStoreAsync();
GetAuthentication();
}
async public void GetAuthentication()
{
try
{
//IMobileServiceTable<User_Cred> todoTable = App.MobileService.GetTable<User_Cred>();
List<User_Cred> items = await todoGetTable
.Where(User_Cred => User_Cred.userName == UserNameEnter.Text)
.ToListAsync();
IsAuth = items.Count();
// Return a List UI control value back to the form
foreach (var value in items)
{
var dialog = new MessageDialog("Welcome Back " + value.userName);
await dialog.ShowAsync();
this.Frame.Navigate(typeof(UserHome));
}
if (IsAuth > 0)
{
var dialog = new MessageDialog("You are Authenticated");
await dialog.ShowAsync();
}
else
{
var dialog = new MessageDialog(" Account Does Not Exist, please Register to get Started.");
await dialog.ShowAsync();
}
}
catch (Exception em)
{
var dialog = new MessageDialog("An Error Occured: " + em.Message);
await dialog.ShowAsync();
}
}
async private void submitAuthBtn_Copy_Click(object sender, RoutedEventArgs e)
{
try
{
User_Cred itemReg = new User_Cred
{
userName = UserNameEnter.Text,
Password = PWEnter.Text
};
await App.MobileService.GetTable<User_Cred>().InsertAsync(itemReg);
var dialog = new MessageDialog("Thank you for Registering! Lets begin");
await dialog.ShowAsync();
}
catch (Exception em)
{
var dialog = new MessageDialog("An Error Occured: User Nname
Already exists.");
await dialog.ShowAsync();
}
}
}
}
試した後、私はまだ運を持っていないです、コードがポイントに動作しているようです。
これは私が私のメインページに配置したものである(ログインしている)
private void saveSetting(string userLabel, string userNamelabel)
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
//Saving your setting
localSettings.Values[userLabel] = UserNameEnter.Text;
}
私の次のページに移動すると、これは私が置かれているコードです。
private string readSetting(string userLabel)
{
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
//Reading and returning your setting value
var value = localSettings.Values[userLabel];
if (value != null)
return value.ToString();
else
return userLabel;
UserNameLabelBox.Text = readSetting(userLabel);
}
問題を約UserNameLabelBox(テキストボックス)は緑のsqigglyラインを持っており、VSが到達不能コードが検出されたと言うことです。アプリを実行すると、そのボックスには何も表示されません。
私は答えを適用したので、私はエラーに遭遇します。ログインページの後にロードされる2番目のページで、UserNameLabelBox.Text = readSetting(userNameLabel)を追加すると、赤い行エラーが表示されます。現在のコンテキストに存在しないことを示すuserNameLabelに赤い行が表示されます。
要約すると:ログインページでは、
private void saveSetting(string userLabel, string userNameLabel)
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
//Saving your setting
localSettings.Values[userLabel] = UserNameEnter.Text;
}
ログインが成功した後の次のページで、
public sealed partial class UserHome : Page
{
public UserHome()
{
this.InitializeComponent();
UserNameLabelBox.Text = readSetting(userLabel);
}
エラーが(上記の)発生した場所それがここにある
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(UserJournalPage));
}
private void aboutUs_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(AboutUs));
}
private string readSetting(string userLabel)
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
//Reading and returning your setting value
var value = localSettings.Values[userLabel];
if (value != null)
return value.ToString();
else
return userLabel;
私は助けに感謝が、これは、私は完全に混乱しています。私がこれを入力すると、ログインが成功した後に来るXamlページのテキストブロックにこれをどうやって入れるのかわからないのですが、どこにでもエラーがあります。 – CHernandez
私はあなたがC#のコードを間違って配置していると思います。私は編集を行いました。うまくいけば、これはあなたがこれを少し良く理解するのに役立ちます。また、設定が保存されると、アプリケーション全体でアクセス可能になります。 – Pratyay
編集はエラーを見なかったので役に立ちましたが、文字列をテキストブロックに呼び出すときにエラーが表示されました。私がコールセクションに入れようとすると、何も表示されません。リターンを空のままにしておくか、設定名をその中に置きますか?また、入力したい値がユーザー入力の値であれば、その名前を入力としますか?例、userName = userNameEnter.text userNameまたはuserNameEnter.textを入れますか? – CHernandez