2011-08-27 82 views
3

我試圖掛接到谷歌Analytics(分析),並有unencode屬性是:如何調用Html.BeginForm

@using (Html.BeginForm("Register", "Account", FormMethod.Post, 
     new { id = "account-register-form", 
     onsubmit = "_gaq.push(['_link', 'someurl'])" })) 

我的渲​​染視圖則是這樣的:

<form action="/Account/Register/Basic" id="account-register-form" method="post" 
onsubmit="_gaq.push([&#39;_link&#39;, &#39;someurl&#39;])"> 

我曾嘗試Html.Raw(「_ gaq.push(['_ link','someurl'])」)但這不起作用,因爲我認爲BeginForm會執行編碼。

回答

1

你不需要unncode什麼。你有什麼完全是有效的標記和JavaScript的工作,如在以下live demo

<form action="#" method="get" onsubmit="alert(&#39;some test&#39;);"> 
    <input type="submit" value="OK" /> 
</form> 

因此,保持你的代碼是。

+0

我從來沒有測試過它是否會起作用。不知道這是有效的。但是因爲這看起來令人討厭,我現在感覺很骯髒;) – adriaanp

+0

@adriaanp,你會期望MVC助手產生無效標記嗎? –

+0

我想不是,我會按原樣離開它。 – adriaanp

1

如果您不必使用Html.BeginForm,那麼可以使用下面的代碼片段來解決您的格式問題。

<form action="@Url.Action("Register", "Account")" 
    method="POST" id="account-register-form" 
    onsubmit="_gaq.push(['_link', 'someurl'])"> 
</form> 

這會輸出您需要的html。

+0

這是我最終的結果,但是@達林有一個觀點,也許我應該保持現狀。 – adriaanp

2

代碼工作正常,如果不關閉編碼,但你可以通過創建一個這樣的類關閉屬性編碼:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder 
{ 
protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) 
{ 
    output.Write(value); 
} 
} 

,並在加入這web.config中:

<httpRuntime encoderType="HtmlAttributeEncodingNot"/> 
+0

謝謝你不知道這個設置。但是這會安全嗎?我不想冒這樣的風險。 – adriaanp

+2

@adriannp安全性取決於您的代碼,因爲代碼來自您的源代碼,所以您的代碼不存在漏洞,但是如果html屬性來自數據庫並且供應商是Web用戶,那麼存在漏洞是因爲您沒有編碼用戶提供的數據。所以用戶(黑客)可以在你的html屬性中寫入一個jscript xss或任何不好的代碼。對不起英文=)我希望你明白 – c0demaster