如果是Razor DisplayFor和TextBoxFor MVC4中的其他逻辑

Sof*_*ant 4 razor asp.net-mvc-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);
                }
            }
Run Code Online (Sandbox Code Playgroud)

更新中...

我将代码更改为

            @if (isFlagSet) {
                    Html.TextBoxFor(m => m.HostpitalFinNumber);
                    Html.ValidationMessageFor(m => m.HostpitalFinNumber);
            }
            else {
                    Html.DisplayFor(m => m.HostpitalFinNumber);
            }
Run Code Online (Sandbox Code Playgroud)

以下是生成的HTML.注意如何为Phone而不是医院fin写入输入值.确定为什么会发生这种情况.

    <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>
Run Code Online (Sandbox Code Playgroud)

回答

我忘了把@放在我的html助手面前,摆脱了半冒号.

nem*_*esv 9

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

@if (isFlagSet) {
    @Html.TextBoxFor(m => m.HostpitalFinNumber)
    @Html.ValidationMessageFor(m => m.HostpitalFinNumber)
}
else {
    @Html.DisplayTextFor(m => m.HostpitalFinNumber)
}
Run Code Online (Sandbox Code Playgroud)

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

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