ASP.NET MVC2内联代码视图 - 混合标签

时间:2010-09-21 22:10:12

标签: asp.net-mvc-2

在我的一个观点中,我遇到了几个不同的例外代码:

<% if (Model.Book.ReviewReference == null)
   {%>
       <%=Html.ActionLink("Rate / review this book", "Create", "Review", null, new { id = "reviewLink" }) %>
      <% Html.RenderPartial("CreateReview");
   }
   else
   {%> 
       <%= Html.ActionLink("Edit this book's rating / review","Edit", "Review", new { reviewID = Model.Book.ReviewID}, new {id = "reviewLink"}) %>
        <% Html.RenderPartial("EditReview", Model.Book.Review, new ViewDataDictionary());
   }  %>

我遇到的第一个错误在这里描述: link text

因此你看到Html.RenderPartial("EditReview", Model.Book.Review, new ViewDataDictionary())到那里结束。

我遇到的另一个问题是,对ReviewReference的{​​{1}}评估if条件实际上是null时,仍然以某种方式达到了else语句,而第二个局部视图正在尝试失败渲染自己。

我是否以错误的方式使用了这些交替的内联代码标签?如何在<% %><%= %>之间来回切换?

谢谢。

修改

好的,我太快就标记了答案。我只是用答案中的给定代码尝试了它,并且仍在评估else块,并尝试将null对象传递给局部视图... darn it。

3 个答案:

答案 0 :(得分:1)

您在那里使用标签是正确的。

它们不是2种交替样式,而是视图引擎处理不同语句的方式不同。它会让人感到困惑并不奇怪。

<%=:将此视为Response.Write()。你提供一个字符串。

<% Html.RenderPartial - 这是一个给视图引擎实际呈现局部视图的命令。你没有给它一个字符串,而是告诉视图去获取另一个片段(部分视图),并将其写出来。

答案 1 :(得分:1)

缺少几个结束%&gt;

<% if (Model.Book.ReviewReference == null)
   {%>
       <%=Html.ActionLink("Rate / review this book", "Create", "Review", null, new { id = "reviewLink" }) %>
      <% Html.RenderPartial("CreateReview"); %>
   <%}
   else
   {%> 
       <%= Html.ActionLink("Edit this book's rating / review","Edit", "Review", new { reviewID = Model.Book.ReviewID}, new {id = "reviewLink"}) %>
        <% Html.RenderPartial("EditReview", Model.Book.Review, new ViewDataDictionary()); %>
   <% }  %>

答案 2 :(得分:1)

好的,所以事实证明我的标签使用情况很好,但我的条件是关闭的。它必须是:

if (Model.Book.ReviewReference.EntityKey == null)

我错过了EntityKey属性。