如果设置了某个变量,我希望某个字段成为文本框,如果不是,我希望该字段只显示该值,但该值不可编辑。
我在视图中添加了一些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而不是医院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>
答案
我忘了将@放在我的html助手面前,摆脱半冒号。
答案 0 :(得分: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
会处理它。