Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以xamarin表单将数据从主页上的web api传递到详细信息页面_C#_Asp.net Web Api_Xamarin.forms_Picker - Fatal编程技术网

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之间共享数据。通常,在代码隐藏中包含此类代码不是一个好主意。