【问题标题】:optionsCaption displaying on edit instead of selected valueoptionsCaption 在编辑时显示而不是选定的值
【发布时间】:2014-10-30 05:13:49
【问题描述】:

我有一个包含三个值的选择框。当没有 selectedPhoneType 值时,我想添加“请选择”的文字。

我尝试将optionsCaption: 'Please Select' 添加到数据绑定属性。

问题是,当我执行此操作并单击页面上的编辑时,PhoneType 选择会从所选电话类型恢复为“请选择”文本,而不是显示正确的值。当我删除 optionsCaption 时,它会在编辑页面上显示正确的值。

当应该显示 selectedPhoneType 的值时,如何让它停止显示“请选择”?

        <select id="PhoneType" data-bind="options: $root.phoneTypes, optionsText: 'phoneTypeDescription', optionsValue: 'phoneTypeId',  value: $root.selectedPhoneType, disable: phoneId() > 0" required></select>

查看模型

module ViewModels {
    export class Phone {
        constructor() {
            // Set up validation options
            ko.validation.init({
                insertMessages: false,
                decorateElement: true,
                errorElementClass: "input-validation-error"
            });

            var service = new Services.PhoneService();

            Q.all([
                service.getByFid()
                .then((phones: Array<Models.Phone>) => {
                    this.phones(phones);
                })
            ]).then(() => {
                // Populate drop downs based on static data
                var phoneTypes = Enums.PhoneTypeHelper.createArray();
                this.phoneTypes(phoneTypes);

                // This will diplay grid once the results have returned
                $("#sub-content").css("display", "block");
            }).fail((error: any) => {
                // Add this error to errors
                this.errors([error]);
            }).fin(() => {
                $("#loading").css("display", "none");
            });
        }

        phones = ko.observableArray<Models.Phone>();
        phoneTypes = ko.observableArray<Models.PhoneTypeLookup>();
        selectedPhoneType = ko.observable<number>().extend({ required: { message: "Please select a phone type." } });
        selectedPhone = ko.observable<Models.Phone>();
        template = ko.observable<string>("mainTemplate");
        errors = ko.observableArray<string>();

        // Used to handle the click event for Edit
        edit = (phone: Models.Phone) => {
            var phoneTypes = Enums.PhoneTypeHelper.createArrayWith(phone.phoneTypeId());

            this.phoneTypes(phoneTypes);
            this.selectedPhone(phone);
            this.template("editTemplate");

            // Add input masks
            $("#PhoneNumber").mask("999-999-9999", { placeholder: "###-###-####" });
            $("#PhoneExtension").mask("9999", { placeholder: "####" });
        }

【问题讨论】:

  • 为什么编辑方法中只修改phoneTypes而不修改selectedPhoneType ?但是,您可以尝试通过将 valueAllowUnset: true 属性添加到绑定来“解决”您的问题。但这并不能解决您在调用edit 函数时丢失selectedPhoneType 的原始问题
  • 我不知道,这是我继承的一些代码。也许我需要在编辑方法中设置 selectedPhoneType 。当我没有设置 optionsCaption 属性时,它会自动选择正确的。

标签: knockout.js asp.net-mvc-5 typescript


【解决方案1】:

我将它添加到编辑部分并且它有效。感谢 nemesv 的建议。

this.selectedPhoneType(phone.phoneTypeId());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多