小编Jer*_*ser的帖子

将重写的成员更改为异步

我正在覆盖基类库中的方法.但是,在我重写的实现中,我正在使用全新的HttpClient,它全部基于异步方法.因此我必须将我的方法标记为异步,这意味着我需要将方法的返回参数从字符串更改为任务.然而,编译器给出了一个错误:"返回类型必须是'string'才能匹配被覆盖的成员...."

    public class BaseClass
    {
        public virtual string GetName()
        {
            ...
        }
    }

    public class MyClass : BaseClass
    {
        public override async Task<string> GetName()
        {
            HttpClient httpClient = new HttpClient();
            var response = await httpClient.GetAsync("");
            if (response.IsSuccessStatusCode)
            {
                var responseContent = response.Content;

                return await responseContent.ReadAsStringAsync();
            }

            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当然,显而易见的解决方案是将BaseClass中的GetName()的返回类型更改为Task <string>,但我无法控制BaseClass,因为它是一个外部库;

我目前的解决方案是以同步方式使用HttpClient类,即更改MyClass,如下所示:

    public class MyClass : BaseClass
    {
        public override string GetName()
        {
            HttpClient httpClient = new HttpClient();
            var response = httpClient.GetAsync("");
            if (response.Result.IsSuccessStatusCode)
            {
                var responseContent = response.Result.Content; …
Run Code Online (Sandbox Code Playgroud)

c# async-await

14
推荐指数
1
解决办法
8238
查看次数

根据视图使用不同的updatetargetid

我有一个网页,显示HTML表格中的项目列表.列表上方是一个表单,允许用户通过AJAX(使用Ajax.BeginForm)将新项添加到列表中.当数据通过AJAX发布到控制器时,我将新项添加到数据库后端,并通过部分视图生成新的表行,然后将其附加到现有表.

当添加新项目的表单包含错误时,我想将表单呈现回Web浏览器并显示它.

所以这就是问题:是否可以在控制器中指定UpdateTargetId?目前,我从控制器返回的任何视图都插入到同一目标中,但我想根据从控制器返回的任何视图更新不同的目标(即不同的UpdateTargetId).

asp.net-mvc

4
推荐指数
1
解决办法
2908
查看次数

具有CanExecute组合标准的ReactiveCommand

我刚开始使用ReactiveUI.我有以下课程:

public class MainViewModel : ReactiveObject, IRoutableViewModel 
{
   private string shareText;

   public ReactiveCollection<SharingAccountViewModel> SelectedAccounts { get; private set; }

   public string ShareText 
   { 
      get { return shareText; }
      set
      {
          this.RaiseAndSetIfChanged(ref shareText, value);
      }
   }

   public IReactiveCommand ShareCommand { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在以下条件为真时允许命令执行:

  1. ShareText属性不为null或为空
  2. SelectedAccounts集合包含至少一个值

我尝试了以下但它不起作用,因为连接到命令的按钮永远不会启用:

ShareCommand = new ReactiveCommand(this.WhenAny(viewModel => viewModel.ShareText,
  viewModel => viewModel.SelectedAccounts,
  (x, y) => !String.IsNullOrEmpty(x.Value) && y.Value.Count > 0));
Run Code Online (Sandbox Code Playgroud)

如果我只检查ShareText属性,它可以正常工作:

  ShareCommand = new ReactiveCommand(this.WhenAny(viewModel => viewModel.ShareText,
            (x) => !String.IsNullOrEmpty(x.Value)));
Run Code Online (Sandbox Code Playgroud)

我查看了ReactiveUI问题的答案:将CanExecute与ReactiveCommand一起使用

基于此我尝试了以下内容: …

c# system.reactive reactiveui

1
推荐指数
1
解决办法
1675
查看次数