0

我在 Umbraco 表单中使用预值源来呈现 db 表中的选项列表。我在 html 标记中注意到 Value Column 被放置在列表值和标签中,如下所示:

<input type="radio" name="3e56b737-c3db-4413-9099-844d002fc3c9" id="3e56b737-c3db-4413-9099-844d002fc3c9_4" value="Secondary">
<label for="3e56b737-c3db-4413-9099-844d002fc3c9_4">Secondary</label>

我希望输入值是键列,标签文本是值列。因此,在呈现列表时,似乎完全忽略了 Key Column。有人遇到过这种情况么?我做错了什么还是有其他方法可以检索所选列表项的键列值?

4

1 回答 1

0

好的,我发现了如何解决这个问题。意识到标记由 Views\Partials\Forms\Themes\default\Fieldtypes\FieldType.RadioButtonList.cshtml 和 DropDownList.cshtml 中的局部视图控制。

所以这行写着:

<input type="radio" name="@Model.Id" id="@string.Concat(Model.Id,"_",i)" value="@pv.Value" 

需要阅读:

<input type="radio" name="@Model.Id" id="@string.Concat(Model.Id,"_",i)" value="@pv.Id" 

但是:这对于 db 表中的字段值非常有用,但不适用于您指定了硬编码的预值列表的字段。因此,要处理这两种情况,上述行变为:

var valueId = pv.Id == "0" ? pv.Value : pv.Id;
<input type="radio" name="@Model.Id" id="@string.Concat(Model.Id,"_",i)" value="@valueId" 

因此,如果 Id 为 0,它像以前一样使用字符串值(硬编码的预值 ID 始终为零),否则它使用预值源 Id 字段中的 Id。

这里需要注意的是,此解决方案假定您没有填充任何具有合法 ID 为 0 的预值。

于 2020-02-20T17:34:32.117 回答