FormDialog-da ixtiyoriy

Foydalanuvchilarga ariza to'ldirishni so'rash uchun MS bot ramkali va FormDialog foydalanayapman. Parametrlarning bir qismini ixtiyoriy qilishni istayman va shuning uchun ularga [majburiy] ko'rsatma qo'shiladi:

[Prompt("Please specify if you have any additional requirements")]
[Optional]
string AdditionalRequirement { get; set; }

Biroq, bu savollar bot hali to'ldirilganda paydo bo'ladi va foydalanuvchining ularni o'tkazib yuborish imkoniyati yo'q (masalan, "kirish" yoki "o'tish" kabi)

Men noto'g'ri qilyapmanmi yoki kutilgan xatti-harakatlarim bormi? Zarur bo'lmasa, foydalanuvchining o'tkazib yuborishi mumkin bo'lgan parametr bo'lishi mumkinmi?


Yangilash: kutilgan xatti-xarakatlar ixtiyoriy parametrlar har doim ko'rsatib turadi va "no afzal" kabi savolni ataylab tushunish mumkin bo'lgan ba'zi so'zlar mavjud.

Savolni o'tkazib yuborish uchun so'zlardan biri sifatida "skip" ni qanday qo'shish kerakligini tushuntiradigan javob qabul qilinadi.

1
"O'tkazish" deb yozsangiz nima bo'ladi?
qo'shib qo'ydi muallif Ezequiel Jadib, manba
Manba kodiga asoslanib, "no", "none", "menga yoqmaydi" kabi ko'rinadi, ixtiyoriy maydonni o'chirish uchun ham so'zlar to'g'ri bo'ladi. Qanday xatti-harakatlardan qidiryapsiz?
qo'shib qo'ydi muallif Ezequiel Jadib, manba
Manba kodiga asoslanib, "no", "none", "menga yoqmaydi" kabi ko'rinadi, ixtiyoriy maydonni o'chirish uchun ham so'zlar to'g'ri bo'ladi. Qanday xatti-harakatlardan qidiryapsiz?
qo'shib qo'ydi muallif Ezequiel Jadib, manba
Ajoyib. Buning uchun faqat javob qo'shib qo'ydim.
qo'shib qo'ydi muallif Ezequiel Jadib, manba
Ajoyib. Buning uchun faqat javob qo'shib qo'ydim.
qo'shib qo'ydi muallif Ezequiel Jadib, manba
Ajoyib. Buning uchun faqat javob qo'shib qo'ydim.
qo'shib qo'ydi muallif Ezequiel Jadib, manba
O'tkazish - afzallik variantlaridan biri emas. "Hech qanday afzallik" deb yozishim mumkin edi va bu sohada null bo'ldi. Bu ixtiyoriy xatti-xarakatdir, shuning uchun u tashqariga chiqadi.
qo'shib qo'ydi muallif Ravit D, manba
O'tkazish - afzallik variantlaridan biri emas. "Hech qanday afzallik" deb yozishim mumkin edi va bu sohada null bo'ldi. Bu ixtiyoriy xatti-xarakatdir, shuning uchun u tashqariga chiqadi.
qo'shib qo'ydi muallif Ravit D, manba
Ixtiyoriy maydonni o'chirish uchun "o'tish" yozishni xohlayman. Agar sizda kichik kod namunasi bo'lsa, uni juda qadrlayman. Savol-javob ham yangilandi.
qo'shib qo'ydi muallif Ravit D, manba
Ixtiyoriy maydonni o'chirish uchun "o'tish" yozishni xohlayman. Agar sizda kichik kod namunasi bo'lsa, uni juda qadrlayman. Savol-javob ham yangilandi.
qo'shib qo'ydi muallif Ravit D, manba
Ixtiyoriy maydonni o'chirish uchun "o'tish" yozishni xohlayman. Agar sizda kichik kod namunasi bo'lsa, uni juda qadrlayman. Savol-javob ham yangilandi.
qo'shib qo'ydi muallif Ravit D, manba

6 javoblar

Bunga erishishning ikkita usulini o'ylayman (ularni sinovdan o'tkazolmadim, afsus!)

1) ixtiyoriy maydonni TemplateUsage.NoPreference funksiyasidan foydalanishni bildiruvchi Template xususiyati bilan bezatilgan.

[Template(TemplateUsage.NoPreference, "skip")]

2) Add the Skip term to the NoPreference array of the FormBuilder configuration. Something like:

public static IFormBuilder CreateCustomForm()
    where T : class
{
    var form = new FormBuilder();
    var noPreferenceTerms = form.Configuration.NoPreference.ToList();
    noPreferenceTerms.Add("skip");
    form.Configuration.NoPreference = noPreferenceTerms.ToArray();

    return form;
}

Undan keyin foydalanishingiz mumkin:

 return CreateCustomForm()
2
qo'shib qo'ydi
Birinchi qadam shart emas, faqat NoPreference qanday ko'rsatilishini o'zgartiradi. Buning tashqari, ajoyib ish, rahmat!
qo'shib qo'ydi muallif Ravit D, manba

Bunga erishishning ikkita usulini o'ylayman (ularni sinovdan o'tkazolmadim, afsus!)

1) ixtiyoriy maydonni TemplateUsage.NoPreference funksiyasidan foydalanishni bildiruvchi Template xususiyati bilan bezatilgan.

[Template(TemplateUsage.NoPreference, "skip")]

2) Add the Skip term to the NoPreference array of the FormBuilder configuration. Something like:

public static IFormBuilder CreateCustomForm()
    where T : class
{
    var form = new FormBuilder();
    var noPreferenceTerms = form.Configuration.NoPreference.ToList();
    noPreferenceTerms.Add("skip");
    form.Configuration.NoPreference = noPreferenceTerms.ToArray();

    return form;
}

Undan keyin foydalanishingiz mumkin:

 return CreateCustomForm()
2
qo'shib qo'ydi
Birinchi qadam shart emas, faqat NoPreference qanday ko'rsatilishini o'zgartiradi. Buning tashqari, ajoyib ish, rahmat!
qo'shib qo'ydi muallif Ravit D, manba

Bunga erishishning ikkita usulini o'ylayman (ularni sinovdan o'tkazolmadim, afsus!)

1) ixtiyoriy maydonni TemplateUsage.NoPreference funksiyasidan foydalanishni bildiruvchi Template xususiyati bilan bezatilgan.

[Template(TemplateUsage.NoPreference, "skip")]

2) Add the Skip term to the NoPreference array of the FormBuilder configuration. Something like:

public static IFormBuilder CreateCustomForm()
    where T : class
{
    var form = new FormBuilder();
    var noPreferenceTerms = form.Configuration.NoPreference.ToList();
    noPreferenceTerms.Add("skip");
    form.Configuration.NoPreference = noPreferenceTerms.ToArray();

    return form;
}

Undan keyin foydalanishingiz mumkin:

 return CreateCustomForm()
2
qo'shib qo'ydi
Birinchi qadam shart emas, faqat NoPreference qanday ko'rsatilishini o'zgartiradi. Buning tashqari, ajoyib ish, rahmat!
qo'shib qo'ydi muallif Ravit D, manba

Bilib olganimdek, maydonga qo'shimcha izoh berilmaydi. Siz o'zingiz bilgan narsa, vakolatli vakilni metodga (yoki anonim metodga) ​​o'tish, ya'ni siz joriy maydon faol yoki yo'qligini tekshirish uchun chegara bajarishingiz mumkin. Aks holda, maydon foydalanuvchi tomonidan so'ralmaydi. Xulosa qisqa misol:

public static IForm BuildForm()
{
    return new FormBuilder()
        .Field(nameof(AdditionalRequirement), active: IsAdditionalRequirementActive)
        .Build();
}

private static bool IsAdditionalRequirementActive(MyForm state)
{
    if (state.SomeOtherField == "Value")
        return true;
    else
        return false;
}
0
qo'shib qo'ydi

Bilib olganimdek, maydonga qo'shimcha izoh berilmaydi. Siz o'zingiz bilgan narsa, vakolatli vakilni metodga (yoki anonim metodga) ​​o'tish, ya'ni siz joriy maydon faol yoki yo'qligini tekshirish uchun chegara bajarishingiz mumkin. Aks holda, maydon foydalanuvchi tomonidan so'ralmaydi. Xulosa qisqa misol:

public static IForm BuildForm()
{
    return new FormBuilder()
        .Field(nameof(AdditionalRequirement), active: IsAdditionalRequirementActive)
        .Build();
}

private static bool IsAdditionalRequirementActive(MyForm state)
{
    if (state.SomeOtherField == "Value")
        return true;
    else
        return false;
}
0
qo'shib qo'ydi

Bilib olganimdek, maydonga qo'shimcha izoh berilmaydi. Siz o'zingiz bilgan narsa, vakolatli vakilni metodga (yoki anonim metodga) ​​o'tish, ya'ni siz joriy maydon faol yoki yo'qligini tekshirish uchun chegara bajarishingiz mumkin. Aks holda, maydon foydalanuvchi tomonidan so'ralmaydi. Xulosa qisqa misol:

public static IForm BuildForm()
{
    return new FormBuilder()
        .Field(nameof(AdditionalRequirement), active: IsAdditionalRequirementActive)
        .Build();
}

private static bool IsAdditionalRequirementActive(MyForm state)
{
    if (state.SomeOtherField == "Value")
        return true;
    else
        return false;
}
0
qo'shib qo'ydi