C# 以xamarin表单将数据从主页上的web api传递到详细信息页面
以下是包含数据的页面的代码外观:C# 以xamarin表单将数据从主页上的web api传递到详细信息页面,c#,asp.net-web-api,xamarin.forms,picker,C#,Asp.net Web Api,Xamarin.forms,Picker,以下是包含数据的页面的代码外观: private async Task GetLeaveBalance() { try { Uri = "http://192.168.42.35/API/api/leave/getbalance/"+ empId + "/"+ companyId; client = new HttpClient(); var authHeaderValue = basic; client.Defa
private async Task GetLeaveBalance() {
try
{
Uri = "http://192.168.42.35/API/api/leave/getbalance/"+ empId + "/"+ companyId;
client = new HttpClient();
var authHeaderValue = basic;
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
HttpResponseMessage response = await client.GetAsync(Uri);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
var emp = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
dataGrid.ItemsSource = emp;
UserDialogs.Instance.HideLoading();
}
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
UserDialogs.Instance.ShowError(e.Message);
}
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details());
}
private异步任务GetLeaveBalance(){
尝试
{
Uri=”http://192.168.42.35/API/api/leave/getbalance/“+empId+”/“+companyId;
client=新的HttpClient();
var authHeaderValue=基本;
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“基本”,authHeaderValue);
HttpResponseMessage response=wait client.GetAsync(Uri);
response.EnsureSuccessStatusCode();
string responseBody=wait response.Content.ReadAsStringAsync();
if(响应。IsSuccessStatusCode)
{
var emp=JsonConvert.DeserializeObject(responseBody);
dataGrid.ItemsSource=emp;
UserDialogs.Instance.HideLoading();
}
}
捕获(HttpRequestException e)
{
Console.WriteLine(“\n异常被捕获!”);
WriteLine(“Message:{0}”,e.Message);
UserDialogs.Instance.bathror(e.Message);
}
}
已单击私有无效按钮(对象发送者,事件参数e)
{
Navigation.PushAsync(新的详细信息());
}
我的第二页(详细信息页)有一个选择器,它需要由我从emp变量获取的数据填充,因此如何将数据从第一页传递到第二页(详细信息页)?考虑到您的方法和代码,您可以直接将数据传递到第二页的构造函数
List<Leave> leaves = new List<Leave>();
private async Task GetLeaveBalance() {
...
leaves = JsonConvert.DeserializeObject<List<Leave>>(responseBody);
...
}
private void Button_Clicked(object sender, EventArgs e)
{
Navigation.PushAsync(new Details(leaves));
}
List leaves=新列表();
私有异步任务GetLeaveBalance(){
...
leaves=JsonConvert.DeserializeObject(responseBody);
...
}
已单击私有无效按钮(对象发送者,事件参数e)
{
PushAsync(新细节(leaves));
}
您也可以通过MessagingCenter,以下是一些步骤
首先在第二页中注册messagingcenter任务
MessagingCenter.Subscribe<SecondPage(you can create a empty interface if you want to use as type),string>(this, "PopulateSecondPage", (sender,DataFromMainPage) =>
{
//your code to handle DataFromMainPage
});
MessagingCenter.Subscribe(此“PopulateSecondPage”(发件人,DataFromMainPage)=>
{
//处理来自MainPage的数据的代码
});
然后使用
var page = new SecondPage();
Navigation.PushAsync(page);
MessagingCenter.Send<MainPage>(page, "PopulateSecondPage","Data you want to pass");
var page=new SecondPage();
Navigation.PushAsync(第页);
发送(页面“PopulateSecondPage”,“您要传递的数据”);
有很多方法可以做到这一点。会话变量、cookie、查询字符串等。。。但是,为什么不在访问详细信息页面时再次从API请求数据呢?这是任何情况下最安全的方法会话可以存储列表数据吗?它可以存储您想要的任何对象。但是,在将其从会话中取出后,您必须将其转换回正确的类型。但是xamarin表单中没有会话管理API。您在应用程序中是否使用MVVM方法?如果是,为什么不使用相同的ViewModel或在ViewModel之间共享数据。通常,在代码隐藏中包含此类代码不是一个好主意。