4

如果设置了某个变量,我希望某个字段成为文本框,如果不是,我希望该字段仅显示值,但该值不可编辑。

我将一些 if else 逻辑放入我的视图中,并且该值不会显示。我在这里错过了什么吗?

            @{
                if (isFlagSet) {
                    Html.TextBoxFor(m => m.HostpitalFinNumber, new { @Value = Model.HostpitalFinNumber });
                    Html.ValidationMessageFor(m => m.HostpitalFinNumber);
                }
                else {
                    Html.DisplayTextFor(m => m.HostpitalFinNumber);
                }
            }

更新...

我将代码更改为

            @if (isFlagSet) {
                    Html.TextBoxFor(m => m.HostpitalFinNumber);
                    Html.ValidationMessageFor(m => m.HostpitalFinNumber);
            }
            else {
                    Html.DisplayFor(m => m.HostpitalFinNumber);
            }

以下是正在生成的 HTML。请注意如何为 Phone 而不是为医院鳍写入输入值。热确定为什么会这样。

    <tr><td>
        <label for="Phone">Phone</label>
        </td>
        <td>
        <input Value="4124880798" id="Phone" name="Phone" type="text" value="4124880798" />
    </td></tr>
    <tr><td>
        <label for="HostpitalFinNumber">HostpitalFinNumber</label>              
        </td>
        <td>

    </td></tr>

回答

我忘了把 @ 放在我的 html 助手前面并去掉分号。

4

1 回答 1

9

您的 Razor 语法错误,正确的语法是(您不需要周围的@{ }):

@if (isFlagSet) {
    @Html.TextBoxFor(m => m.HostpitalFinNumber)
    @Html.ValidationMessageFor(m => m.HostpitalFinNumber)
}
else {
    @Html.DisplayTextFor(m => m.HostpitalFinNumber)
}

Html 助手不会直接写入响应(名称以 开头的除外Render),因此您需要使用 将@生成的 HTML 写入输出。

请注意,您不需要使用表达式手动设置值,new { @Value = Model.HostpitalFinNumber }因为它Html.TextBoxFor会处理它。

于 2012-10-18T14:44:07.233 回答