2017-03-09 30 views
0

我想在我的RootDialog中顯示DialogForm。我試圖通過做像calling forms from dialogs這樣做。然而,我的問題在於我有一個由Entity Framework生成的模型類,其中包含一些關於主鍵(或外鍵)的字段,我不希望我的客戶端爲它輸入輸入。所以我的問題是我怎樣才能讓DialogForm只是要求我的客戶輸入我想要的字段呢? 這裏是我的模型類:FormDialog顯示模型類Bot框架中的一些特定字段

[Serializable] 
public partial class BOT_CUSTOMERINFO 
{ 

    public int CUSTOMER_ID { get; set; } 

    public Nullable<int> DOMAIN_ID { get; set; } 
    public string NAME { get; set; } 
    public string EMAIL { get; set; } 
    public string PHONE { get; set; } 

    public Nullable<int> RECORD_STATUS { get; set; } 

    public static IForm<BOT_CUSTOMERINFO> BuildForm() 
    { 

     return new FormBuilder<BOT_CUSTOMERINFO>() 
      .Message("Vui lòng cung cấp thông tin") 
      .Field(nameof(NAME)) 
      .Field(nameof(EMAIL)) 
      .Field(nameof(PHONE)) 
      .Field(new FieldReflector<BOT_CUSTOMERINFO>(nameof(CUSTOMER_ID)).SetActive((state) => false)) 
      .Build(); 

    } 

} 

,因此我所習慣叫FormDialog:

private BuildFormDelegate<Models.FormDialog_Models.CustomerInfoFormModel> MakeCustomerInfoForm; 

    internal void CustomerInfoDialog(BuildFormDelegate<Models.BOT_CUSTOMERINFO> makeCustomerInfoForm) 
    { 

     this.MakeCustomerInfoForm = makeCustomerInfoForm; 

    } 
    public async Task ResumeAfterChooseQuestion(IDialogContext context, IAwaitable<BOT_QUESTION> result) 
    { 
     var value = await result; 
     if(value != null) 
     { 
      BotDBEntities DbContext = new BotDBEntities(); 
      if(DbContext.BOT_ANSWER.Any(answer => answer.QUESTION_ID == value.QUESTION_ID)) 
      { 
       List<BOT_ANSWER> ListAnswer = DbContext.BOT_ANSWER.Where(answer => answer.QUESTION_ID == value.QUESTION_ID).ToList(); 
       await ShowListAnswer(context, ListAnswer); 
       //PromptDialog.Choice(context, this.ResumeAfterChooseAnswer,ListAnswer, "Click để chọn:", "Không hợp lệ", 3, PromptStyle.Auto); 
      } 
      if(DbContext.BOT_QUESTION.Any(question => question.PREVQUESTION_ID == value.QUESTION_ID)) 
      { 
       List<BOT_QUESTION> ListQuestion = DbContext.BOT_QUESTION.Where(question => question.PREVQUESTION_ID == value.QUESTION_ID).ToList(); 
       await this.ShowListQuestion(context, ListQuestion); 
      } 
      if(value.QUESTION_TYPE.Value == 1) 
      { 
       var customerInfoForm = new FormDialog<Models.BOT_CUSTOMERINFO>(new Models.BOT_CUSTOMERINFO(), MakeCustomerInfoForm, FormOptions.PromptInStart); 

       context.Call(customerInfoForm, CustomerInfoFormCompleted); 
       // var customerInfoForm = new FormDialog<Models.FormDialog_Models.CustomerInfoFormModel>(new Models.FormDialog_Models.CustomerInfoFormModel(),MakeCustomerInfoForm, FormOptions.PromptInStart); 
       // context.Forward(customerInfoForm, CustomerInfoFormCompleted); 
       // context.Call(customerInfoForm, CustomerInfoFormCompleted); 
       //context.Call<Idia<BOT_CUSTOMERINFO>>(BOT_CUSTOMERINFO.BuildForm(), CustomerInfoFormCompleted); 
      } 

     } 
     else 
     { 

      context.Wait(this.MessageReceiveAsync); 
     } 

    } 

回答

1

在聲明你FormBuilder<BOT_CUSTOMERINFO>您可以停用這些領域,使用Advanced.Field.SetActive

new FormBuilder<BOT_CUSTOMERINFO> 
.Field(new FieldReflector<BOT_CUSTOMERINFO>(nameof(CUSTOMER_ID)) 
     .SetActive((state) => false); 
+0

所以我必須在我的Model類中創建一個BuildForm方法並設置Deactive,並最終在我通過調用context.Call()方法創建它時自動完成它? –

+0

在你的模型或任何其他地方;沒關係。是的,它應該以這種方式工作, –

+0

其實,我已經將這行代碼添加到我的BOT_CUSTOMERINFO類,但它不起作用 –

相關問題