剃刀视图和HTML文本

时间:2012-01-14 20:28:02

标签: asp.net-mvc razor

我正试图抓住Razor,并且遇到了一个基本障碍。我根据用户身份验证状态生成一个小菜单。但是,我做错了。

<div>
    <a href="/">Home</a>&nbsp;&nbsp; 
    <a href="/">List</a>
    @if (Request.IsAuthenticated)
    {
        &nbsp;
        &nbsp;
        <a href="/">Upload</a>
        &nbsp;
        &nbsp;
        <a href="/logout" onclick="return confirm('Are you sure you want to delete this image?');">Logout</a>
    }
</div>

它不喜欢我的{}部分中的HTML。我认为它需要HTML标签......类似于<div>,但因为我使用的是&nbsp,所以它并不开心。我该怎么做?

此外,我正在尝试处理图像标记。但这是令人沮丧的失败。

@using GalleryPresentation.Models
@model IndexModel
@{
    ViewBag.Title = "Craig and Melanie's Digital Moments";
}

<br/>
<div style="text-align: center">
    <img src="@Html.Raw(m => m.RandomImageUrl) />
</div>

我的模型很简单:

{
    public class IndexModel
    {
        public string RandomImageUrl { get; set; }
    }
}

3 个答案:

答案 0 :(得分:3)

Razor无法检测到您是否正在进入HTML模式。使用特殊的<text> Razor标记表示您处于HTML模式。

答案 1 :(得分:1)

如果要显示HTML中的内容,可以使用@ Html.Raw()方法。所以您的代码迁移

     <div>
                        <a href="/">Home</a>&nbsp;&nbsp;  
                        <a href="/">List</a> 
                        @if (Request.IsAuthenticated) 
                        { @Html.Raw("
                            &nbsp; 
                            &nbsp; 
                            <a href="/">Upload</a> 
                            &nbsp; 
                            &nbsp; 
                            <a href="/logout" onclick="return confirm('Are you sure you want to delete this image?');">Logout</a> ")
                        } 
                    </div> 

答案 2 :(得分:0)

意味着不间断的空间。它在html中用于在中间插入空格。由于您处于剃刀代码的中间,编译器不知道何时使用html代码,没有指令。因为它会给出编译错误。这更像是c中的预处理程序指令。 (如果你知道#include)。在这里你只需要使用。正确的代码如下所示。

  <div>
<a href="/">Home</a>&nbsp;&nbsp; 
<a href="/">List</a>
@if (Request.IsAuthenticated)
{
    <text>
    &nbsp;
    &nbsp;
    </text>
    <a href="/">Upload</a>
    <text>
    &nbsp;
    &nbsp;
    </text>
    <a href="/logout" onclick="return confirm('Are you sure you want to delete this image?');">Logout</a>
}
  </div>