2

我正在学习 asp.net mvc 只是通过在线教程

1) just see <span>@model.Message</span> and @Html.Raw(model.Message)

假设如果“Hello Word”存储在 Message 中,那么如果我写这样的语句,则应该显示“Hello Word”, <span>@model.Message</span>但我就是不明白它的特殊目的是什么@Html.Raw(model.Message)。什么@Html.Raw() will render

请与更多示例讨论以更好地理解差异。

2)只看下面的两个片段

@if (foo) {
  <text>Plain Text</text> 
}

@if (foo) {
  @:Plain Text is @bar
}

在哪个版本的 html 中引入了所调用的标签。是否等同于

或者是什么 ?这个标签的目的是什么?

请告诉我@:Plain Text is @bar @: 的特殊含义是什么?如果我们的意图是将文本与表达混合,那么我们不能像纯文本那样写@bar

3) <span>ISBN@(isbnNumber)</span> 它将打印什么?如果 2000 存储在 isbnNumber 变量中,那么它可能会打印<span>ISBN2000</span>. am i right ?

@(variable-name)那么告诉我为什么括号和@符号一起的特殊含义是什么?

4)只看

<span>In Razor, you use the 
@@foo to display the value 
of foo</span>

如果 foo 具有称为上帝的价值,那么这@@foo将打印什么?

5)看到这个并指导我了解下面给出的更多语法

一个) @(MyClass.MyMethod<AType>())

b)

@{
  Func<dynamic, object> b = 
   @<strong>@item</strong>;
}
@b("Bold this")

C) <div class="@className foo bar"></div>

6)看到这个

@functions
{
string SayWithFunction(string message)
{
return message;
}
}
@helper SayWithHelper(string message)
{

Text: @message

}
@SayWithFunction("Hello, world!")
@SayWithHelper("Hello, world!")

他们试图声明什么?功能 ?它是什么语法?似乎已经以两种不同的方式声明了两个函数?请用更多样本解释这一点。谢谢

更多问题

7)

@{
  Func<dynamic, object> b = @<strong>@item</strong>;
}
<span>This sentence is @b("In Bold").</span>

上面那行是什么意思?是匿名代表吗?当有人打电话时@b("In Bold")会发生什么?

8) @{ var items = new[] { "一", "二", "三" }; }

<ul>
@items.List(@<li>@item</li>)
</ul>

告诉我一些关于 List() 函数以及 item 变量来自哪里的信息?

9)

@{
    var comics = new[] { 
        new ComicBook {Title = "Groo", Publisher = "Dark Horse Comics"},
        new ComicBook {Title = "Spiderman", Publisher = "Marvel"}
    };
}

<table>
@comics.List(
  @<tr>
    <td>@item.Title</td>
    <td>@item.Publisher</td>
  </tr>)
</table>

请简单解释一下上面的代码。谢谢

4

2 回答 2

1

1)任何类型的@Variable输出都会使 MVC 自动对值进行编码。也就是说 if foo = "Joe & Dave", then自动@foo变为Joe &amp; Dave。为了逃避这种行为,你有@Html.Raw.

2) <text></text>当解析器遇到问题时,是否可以帮助您。您必须记住 Razor 使用语言的语义进出 HTML/代码。也就是说,它使用 XML 解析器知道它在 HTML 中,当它在 C#/VB 中时通过其语法(如大括号或Then..End分别)。当您想摆脱这种格式时,您可以使用<text>. 例如

<ul>
    <li>
        @foreach (var item in items) {
          @item.Description
          <text></li><li></text>
        }
    </li>
</ul>

在这里,您正在弄乱解析器,因为它不再符合“标准”HTML 块。will </li>through razor for a loop,但是因为它被包裹在其中,<text></text>所以它有一种更明确的方式来知道代码在哪里结束和 HTML 从哪里开始。

3)是的,括号可以帮助解析器明确定义应该执行的内容。Razor 会尽最大努力了解您要输出的内容,但有时它会关闭。括号解决了这个问题。例如

@Foo.bar

如果您只@Foo定义为字符串,Razor 将不可避免地尝试查找bar属性,因为它遵循 C# 的命名约定(这将是 C# 中非常有效的表示法,但不是我们的意图)。所以,为了避免它继续我们可以使用括号:

@(Foo).bar

一个值得注意的例外是当有一个单一的尾随周期时。例如

Hello, @name.

Razor 解析器没有意识到任何有效(就语言而言),因此它只是输出name和之后的一个句点。

4) @@是当您需要实际打印时 razor 的转义方法@。因此,在您的示例中,您会@foo在页面上看到纯文本。这在直接在页面上输出电子邮件地址时很有用,例如

bchristie@@contoso.com

现在 razor 不会查找contoso.com变量。

5)您看到了在有效 C# 代码和 HTML 之间跳转的各种快捷方式和用法。请记住,您可以在两者之间切换,而您看到的 HTML 实际上只是IHtmlString最终输出到缓冲区的编译后的代码。

于 2013-07-17T13:46:53.193 回答
0

1.

默认情况下,Razor 会自动对您的输出值进行 html 编码(<div>变成&lt;div&gt;)。@Html.Raw当您明确想要在没有任何编码的情况下按原样输出值时应该使用(在 a 中间输出 JSON 字符串非常常见<script>)。


2.

<text>and的目的@:是转义常规的 Razor 语法流并输出文字文本值。例如:

// i just want to print "Haz It" if some condition is true
@if (Model.HasSomething) { Haz It } // syntax error
@if (Model.HasSomething) { <text>Haz It</text> } // just fine

@:开始,它开始一个文本文字,直到下一个换行符(输入),所以:

@if (Model.HasSomething) { @:Haz It } // syntax error, no closing '}' encountered

// just fine
@if (Model.HasSomething)
{
    @:Haz It
}

3.

默认情况下,如果您@在引号/双引号 ( <tr id="row@item.Id") 中,Razor 会将其解释为文字,并且不会尝试将其解析为表达式(出于显而易见的原因),但有时您确实想要它,那么您只需编写<tr id="row@(item.Id").


4.

的目的@@只是为了逃避'@'。当您想输出“@”并且不希望 Razor 将 is 解释为表达式时。那么在你的情况下@@foo会打印'@foo'。


5.

一个。 @(MyClass.MyMethod<AType>())将简单地输出方法的返回值(ToString()如有必要,使用)。

湾。是的,Razor 确实允许你定义某种内联函数,但通常你最好使用 Html Helpers// FunctionsDisplayTemplates如下)。

C。看上面。


6.

Razor Helpers开始,请参阅http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

于 2013-07-17T13:58:29.917 回答