Skip to content

textbox Caption: passes check and exec and is silently not written (inputs take Label:); check has no "property this widget does not have" warning #1651

Closed

Description

@MohamedElNady

mxcli v0.28.0 (2026-10-23) · Mendix 11.14.0 (blank repro project) — first hit in an 11.15.0 app · OS Windows Server 2025

Summary

textbox name (Attribute: X, Caption: 'Some label') passes check and exec, and the caption is silently not written: describe page reads the text box back with no label, mx check reports 0 errors, and the page renders an input with no label at all. Input widgets take Label:; Caption: is the action button's and the column's property name, which is exactly why it gets written on a text box by mistake.

This is the same class as several fixed one-property cases — #1307 (action button tooltip), #1567 (quoted Editable:), #1582 (container RenderMode), #1465 (tab page CaptionParams / Visible:) — and the open #1643 (text filter Placeholder: / Adjustable:). What would close the class rather than the next instance: check refusing (or at least warning on) a property the widget does not have.

Minimal repro

create module ModC;
create persistent entity ModC.Item (Name: String(50));
create page ModC.ItemEdit
  (
    Title: 'Item',
    Layout: Atlas_Core.PopupLayout,
    Params: ( $Item: ModC.Item )
  )
  {
    dataview dvItem (DataSource: $Item) {
      textbox tbName (Attribute: Name, Caption: 'Item name')
      textbox tbName2 (Attribute: Name, Label: 'Item name (Label)')
    }
  };

Expected

check says that textbox has no Caption property (ideally: "did you mean Label:?"), or exec maps it to the label. Either is fine; silently dropping it is the problem.

Actual

$ mxcli check <repro>/scripts/ewo_caption.mdl -p Repro.mpr --references
  ⚠ page ModC.ItemEdit: DataView `dvItem` contains input fields but is not inside a layout grid … [MPR010]
1 issues: 0 errors, 1 warnings, 0 info
Check passed!

$ mxcli exec <repro>/scripts/ewo_caption.mdl -p Repro.mpr
Created module: ModC
Created entity: ModC.Item
Created page ModC.ItemEdit

$ mxcli -p Repro.mpr -c "describe page ModC.ItemEdit"
create or modify page ModC.ItemEdit (Title: 'Item', Layout: Atlas_Core.PopupLayout, Params: ( $Item: ModC.Item )) {
  dataview dvItem (DataSource: $Item, ReadOnlyStyle: Control) {
    -- Context: $currentObject (ModC.Item)
    textbox tbName (Attribute: Name)
    textbox tbName2 (Label: 'Item name (Label)', Attribute: Name)
  }
};

$ mx check Repro.mpr
The app contains: 0 errors.

(The only warning is the unrelated MPR010 layout-grid hint; the repro leaves the layout grid out to stay minimal. In the app where this was found the data view was inside a layout grid and the result was the same.)

Suggestion

A per-widget allow-list of property names in the page checker, with a "did you mean" for the common cross-widget mix-ups (Caption↔Label on inputs and buttons, Content↔Caption, Placeholder on widgets that have none).

Workaround we use

Label: on every input widget, and a browser review of every new dialog — the missing label was found by eye, not by any check.

Session log (isolated HOME, repro project only; local paths replaced by <repro>)
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "mxcli check", "args": ["C:\\Tools\\mxcli.exe", "check", "<repro>/scripts/ewo_caption.mdl", "-p", "Repro.mpr", "--references"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 0}
{"level": "INFO", "msg": "session_end", "commands_executed": 1, "errors_count": 0, "duration_s": 2}
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "mxcli exec", "args": ["C:\\Tools\\mxcli.exe", "exec", "<repro>/scripts/ewo_caption.mdl", "-p", "Repro.mpr"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "CreateModuleStmt", "stmt_summary": "create module ModC", "duration_ms": 133}
{"level": "INFO", "msg": "execute", "stmt_type": "CreateEntityStmt", "stmt_summary": "create entity ModC.Item", "duration_ms": 69}
{"level": "INFO", "msg": "execute", "stmt_type": "CreatePageStmtV3", "stmt_summary": "create page ModC.ItemEdit", "duration_ms": 84}
{"level": "INFO", "msg": "session_end", "commands_executed": 4, "errors_count": 0, "duration_s": 0}
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "batch", "args": ["C:\\Tools\\mxcli.exe", "-p", "Repro.mpr", "-c", "describe page ModC.ItemEdit"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 1}
{"level": "INFO", "msg": "execute", "stmt_type": "DescribeStmt", "stmt_summary": "describe PAGE ModC.ItemEdit", "duration_ms": 24}
{"level": "INFO", "msg": "session_end", "commands_executed": 2, "errors_count": 0, "duration_s": 0}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions