调用Html.BeginForm时如何取消编码属性

时间:2011-08-27 09:01:31

标签: asp.net-mvc

我正试图加入Google Analytics并拥有以下内容:

@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会进行编码。

3 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:1)

如果您不必使用Html.BeginForm,那么使用可以使用下面的代码段来解决您的格式问题。

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

这会输出您需要的HTML。

答案 2 :(得分:1)

您无需取消代码任何内容。你拥有的是完全有效的标记和工作javascript,如下面的live demo所示:

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

所以保持你的代码不变。