【问题标题】:Deciding content of html tag based on a conditional in mvc3 asp.net根据mvc3 asp.net中的条件确定html标签的内容
【发布时间】:2012-06-12 09:08:18
【问题描述】:

这听起来很基础,但我找不到答案。

我将 Message 结构传递给 View,我想显示它。

如果 Message.Category 字段是“技术”,我想显示“技术问题”,否则就按原样显示。

如何让视图理解技术问题不是陈述,而是我要显示的 html 文本?

我的代码:

<span class="cright" id="cat">
@{
    if (String.Compare(ViewBag.Message.Category, "Technical") == 0) 
    {
     Technical Problem <----THIS  
    } 
    else @ViewBag.Message.Category
 }
</span>

更多信息: 我正在开发一个消息传递系统。用户创建一条消息,并在发送消息时查看它。该类别是强制性的(问题、建议或技术问题),为了避免数据库中的冗余,我将最后一个选项截断为“技术”,但是当用户查看他们发送的消息时,我希望它完整显示。

谢谢大家;从我得出的所有答案中:

<span class="cright" id="cat">

      @if (ViewBag.Message.Category == "Technical ")
         {<text>Technical Problem</text>}
       else
         {<text>@ViewBag.Message.Category</text>}

</span>

按我的意愿工作。

【问题讨论】:

    标签: asp.net html asp.net-mvc-3 razor


    【解决方案1】:

    原答案

    if(ViewBag.Message.Category == "Technical")
    {
      <span>Technical problem</span>
    }
    else
    {
      <span>Problem is : @(ViewBag.Message.Category)</span>
    }
    

    更新答案

      //Model
       public class Message
       {
          public int ID {get; set;}
          public string Message {get; set;}
          public string Category {get; set;}
       }
    
       //Controller
        public ActionResult Index()
        {
          //If you use Linq to Sql, I made this up but this should give you an idea
    
          using(MessageDataContext context = new MessageDataContext())
          {
            var messages = context.Messages.Where(m => m.Category == "Technical")
           .Select(m => new Message { ID = m.ID, Message = m.Text, Category = m.Category});
    
            return View(messages);
          }
        }
    
    //View
    @model IEnumerable<Message>
    
    @foreach(var message in Model)
    {
        if(message.Category == "Technical")
        {
          //Id and class will be "TechnicalMessage1"
          //Now you can create css class called "TechnicalMessage1" and only message with Id = 1 will have it
          <span id="@(message.Category)Message@(message.ID)" class="@(message.Category)Message@(message.ID)">Technical problem</span>
        }
        else
        {
          <span>Problem is : @(ViewBag.Message.Category)</span>
        }
    }
    

    【讨论】:

    • !谢谢你。这种语法有效。我遇到的唯一问题是跨度有一个类和 id,无论内容如何,​​它们都是相同的。真的没有办法让这个条件在已经创建的标签内工作吗?
    • @Nieszka 是的,但是您需要为您的消息传递某种 id,最好是创建一个包含 int Id 和字符串消息的类,我会更新答案。
    • @Nieszka 你的意思是这样的吗?
    • 谢谢!我实际上并没有从数据库中提取这些消息(尽管我可能应该)。发生的情况是用户有机会查看他刚刚发送的消息,并且该消息仅在视图包中的两个视图之间传递,只有管理员可以查看发送的消息,我认为在那里添加额外的字符不值得额外的计算,他们会知道区别。但是非常感谢您的回答!如果我不是刚刚加入并且缺乏这样做的声誉,我会投票!
    【解决方案2】:

    你可以使用

    <text>Technical Problem</text>
    

    为此。

    【讨论】:

      【解决方案3】:

      这是你要找的吗?

      罢工>

      @("Technical Problem")
      

      或者

      <text>Technical Problem</text>
      

      或者

      @:Technical Problem
      

      阅读http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx 了解语法..

      【讨论】:

      • 嘿,试试你的建议:第一个似乎不起作用,但 VS 没有突出显示它,所以我猜这是代码中其他地方的问题(?)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2012-12-20
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多