2011-06-06 40 views
0

這是一個非常新鮮的ASP.NET問題:我根本不知道並且無法計算出正確的語法。從ASP.NET MVC中的服務器端塊生成HTML

在我看來,我想生成一個動作鏈接,如果我的模型的某些條件爲真。我知道如何使用這個語法來生成一個鏈接:

<%: Html.ActionLink("Do Something", "DoSomething", new { id = Model.ID }) %> 

但由於某些原因,語法並不在此代碼的工作:

<% 
    if (Model.CanDoSomething) 
    Html.ActionLink("Do Something", "DoSomething", new { id = Model.ID }); 
%> 

我真的是一個新手到ASP.NET ,所以我甚至不知道不同語法的語義名稱是<%<%:;我只能說<%void,因爲<%:string。清楚地執行一行只返回一個字符串(Html.ActionLink())的代碼不會產生任何效果。但是,請問什麼是使我的頁面呈現操作鏈接的正確方法?

這是一個很可惜的我不能谷歌「<%」!此主題的任何鏈接或解釋也將非常感激。

回答

1

這將這樣的伎倆

<% if (Model.CanDoSomething) { %> 
    <%: Html.ActionLink("Do Something", "DoSomething", new { id = Model.ID }) %> 
<% } %> 

<%:寫入到輸出緩衝區,但編碼字符串。您也可以使用<%=作爲未編碼輸出,因爲ActionLink返回編碼爲MvcHtmlString

編輯:這也可行

<% 
    if (Model.CanDoSomething) 
    Response.Write(Html.ActionLink("Do Something", "DoSomething", new { id = Model.ID })); 
%> 
+0

當然會,而且我自己也是這麼做的。但是,當然,處理這種情況有一種更優雅的方式嗎? – 2011-06-06 16:05:40

+0

@Shaul。是。改用Razor視圖引擎。 :) – Max 2011-06-06 16:06:32

+1

您可以切換到帶有Razor視圖引擎的MVC 3。這一個有一個更直觀的語法。 – DanielB 2011-06-06 16:07:45

1

<% - 這本身沒有輸出。你會在這個塊中包含沒有輸出的代碼,比如if語句。如果你想輸出 - 你必須結合使用它<%=
與:的區別是: <%:表示它將輸出到響應流,不=必需,但是:表示輸出將被htmlencoded。

 
<%:"sometest&text" %> //will emit "sometesttext" on the page.. htmlencoded. 
<%="sometest&text" %> //will give you the same result without the '&' htmlencoded 
<% SomeFunction() %> //will just run that function - there is no output 
//you want 
<%if (Model.CanDoSomething){%> 
    <%:Html.ActionLink("Do Something", "DoSomething", new { id = Model.ID })%> 
<%}%> 
+0

+1的解釋,如果不完全是我正在尋找的解決方案 - 謝謝!感謝: – 2011-06-06 16:32:13

+0

)它有什麼不同?個人 - 我不會使用Response.Write語法。如果你重構到剃鬚刀的語法,它會變得更加有趣。也不需要在那裏使用htmlencoding冒號語法,因爲<%:HtmlEncodes,並且ActionLink助手已經吐出類型爲MvcHtmlString的'不編碼我' – 2011-06-06 17:23:16