【问题标题】:If value is null put an empty string on razor template?如果值为空,则在剃刀模板上放置一个空字符串?
【发布时间】:2011-08-17 08:19:48
【问题描述】:

我有一个如下所示的剃须刀模板。我想检查输入字段中的值是否为空,输入一个空字符串,如果@UIManager.Member.EMail 有值,输入它的值。我该怎么做?

普通输入:

<input name="EMail" id="SignUpEMail" type="text" class="Input" 
       value="@UIManager.Member.EMail" validate="RequiredField" />

Razor 语法尝试:

<input name="EMail" id="SignUpEMail" type="text" class="Input" validate="RequiredField"
       value="@(UIManager.Member == null) ? string.Empty : UIManager.Member.EMail" />

输入字段中显示的值为:

True ? string.Empty : UIBusinessManager.MemberCandidate.EMail

【问题讨论】:

  • 只要 UIManager 和 UIManager.Member 不为空,这应该已经可以工作了......你能澄清一下吗?
  • 实际上@UIManager.Member 最初为空。它在回发操作后得到它的值。所以它不起作用,你是对的。怎么检查呢?

标签: asp.net-mvc razor


【解决方案1】:

如果听起来你只是想要:

@(UIManager.Member == null ? "" : UIManager.Member.Email)

注意括号的位置很关键;使用 razor,@(....) 为代码定义了一个 explicit 范围 - 因此任何 括号都被视为标记(而不是代码)。

【讨论】:

  • 谢谢。这正是我所需要的。
【解决方案2】:

这正是[DisplayFormat] attribute 上的NullDisplayText 属性的用途。

直接在你的模型上添加这个:

[DisplayFormat(NullDisplayText="", ApplyFormatInEditMode=true)]
public string EMail { get; set; }

【讨论】:

  • 我相信这是最好的答案如果考虑一种方法。更简洁,更易于实施。
  • +1 注意:我发现有必要执行@Html.DisplayFor(m =&gt; m.Email),因为@Model.Email 忽略了该属性。
【解决方案3】:

在cshtml中检查模型的某些属性。

@if(!string.IsNullOrEmpty(Model.CUSTOM_PROPERTY))
{
    <p>@Model.CUSTOM_PROPERTY</p>
}
else
{
    <p> - </p>
}

最好的方法是:

@(Model.CUSTOM_PROPERTY ?? "-")

【讨论】:

  • 很高兴我们现在可以做到这一点,就像在 JS 中一样。
【解决方案4】:

使用null conditional operator:

@UIManager.Member?.Email

【讨论】:

  • 应该是@(UIManager.Member?.Email)
  • 回答问题应该是:@(UIManager.Member?.Email ?? string.Empty)
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2013-12-22
  • 1970-01-01
相关资源
最近更新 更多