2017-07-21 19 views
0

私はアプリケーションにいくつかの動的ロジックを作ろうとしていますが、コンポーネントは協力したくありません。Bussiness Packアラートコンポーネントで苦労しています

これは、マスターページのViewModelです:

public class AdminMasterPageViewModel : DotvvmViewModelBase 
{ 
    public virtual AlertComponent AlertComponent { get; set; } 
    public DotVVM.BusinessPack.Controls.AlertType AlertType { get; set; } 

    public AdminMasterPageViewModel() 
    { 
    } 

    public override Task Init() 
    { 
     InitAlertComponents(); 
     return base.Init(); 
    } 

    private void InitAlertComponents() 
    { 
     AlertComponent = new AlertComponent 
     { 
      IsDisplayed = false, 
      Text = "Default", 
      Type = AlertComponent.Types.Info 
     }; 

     AlertType = DotVVM.BusinessPack.Controls.AlertType.Info; 
    } 

} 

これはMasterViewでdothtmlです: "子" で

<%--MAIN CONTENT BY PLACEHOLDER--%> 
    <div class="content-wrapper"> 

     <bp:Alert Type="{value: AlertType}" 
        IsDisplayed="{value: AlertComponent.IsDisplayed}" 
        AllowDismiss="true" 
        Text="{value: AlertComponent.Text}" 
        AutoHideTimeout="3" /> 

     <dot:ContentPlaceHolder ID="MainContent" /> 
    </div> 

ViewModelに私はこのイベントを持っている:

public async void SaveUserRoleGroup() 
    { 
     UserRoleGroupDetailDTO.AppRoleForUserRoleGroupListDTOs = AppRoleListDTOs.Items.Where(i => i.IsAllowed = true).ToList(); 

     AlertComponent = await userRoleGroupDetailFacade.CreateUserRoleGroupAsync(UserRoleGroupDetailDTO); 

    } 

のための私のクラスrepresenterこのコンポーネントは:

public class AlertComponent 
{ 
    public bool IsDisplayed { get; set; } 
    public string Text { get; set; } 
    public Types Type { get; set; } 
    public enum Types 
    { 
     Success, Info, Warning, Danger 
    } 
} 

そして最後に、私のファサード機能:あなたが見ることができるように

public async Task<AlertComponent> CreateUserRoleGroupAsync(UserRoleGroupDetailDTO dto) 
    { 
     using (var uow = unitOfWorkProvider.Create()) 
     { 
      try 
      { 
       var userRoleGroup = Mapper.Map<UserRoleGroup>(dto); 
       userRoleGroup.PortalSetting = portalSettingRepository.GetById(1); 

       repository.Insert(userRoleGroup); 

       await uow.CommitAsync(); 
      } 
      catch (Exception e) 
      { 
       return new AlertComponent 
       { 
        Text = "Error", 
        IsDisplayed = true, 
        Type = AlertComponent.Types.Danger 
       }; 
      } 
     } 
     return new AlertComponent 
     { 
      Text = "Success", 
      IsDisplayed = true, 
      Type = AlertComponent.Types.Success 
     }; 
    } 

、私はSaveUserRoleGroup機能でAlertComponentを設定していますが、ブラウザの何に起こります。 AlertTypeが変更されていませんが、それでも問題はありませんが、それでもMasterViewModelで設定したデフォルトのAlertType情報があります。 なぜアラートは表示され、機能していないのですか?

はあなたが唯一のviewmodel初期に設定されたAlertTypeオブジェクトのプロパティへのアラートタイプをバインド返信

+0

ページのコマンドで呼び出されるメソッドで 'async void'を使うのは良いことではありません。なぜなら、DotVVMは操作が完了するまで待つことができないからです。 公共非同期無効SaveUserRoleGroup(){...} あなたは解決タスクSaveUserRoleGroup(){...} –

答えて

0

いただきありがとうございます。したがって、後でAlertComponentを変更すると、AlertTypeは設定されませんでした。

それとも、我々は2つのnugetパッケージにDotVVM.BusinessPackを分割する必要があり

public AlertType AlertType => (AlertType)AlertComponent.Type; 

litleトリックを使用することができます。 1つはコアタイプ、もう1つはdotvvm依存関係です。

+0

非同期(async) 公衆を使用する必要があります。ありがとうございました。 –