2011-08-16 45 views
2

我有我想一些动态JavaScript(具体onchange事件)分配给Html.TextBoxFor:防止编码经由htmlAttributes分配给Html.TextBoxFor的onchange事件

@Html.TextBoxFor(model => answer.Value, new { @class = "answerinput", @onchange = "submitAnswer(\"" + Model.QuestionID.ToString() + "\")" }); 

然而,当我检查生成的HTML,周围传递到JavaScript函数值引号进行编码,这是一个问题:

onchange="submitAnswer("3")" 

我已经尝试了一些东西,比如将串入一个IHtmlString,然后使用在作业中的IHtmlString,但r结果总是一样的。

有没有办法阻止MVC编码分配给@onchange的值?

谢谢!

+0

您是否尝试过使它成为一个MvcHtmlString ?例如:onchange = MvcHtmlString.Create(“\”3 \“”)' – Tejs

+0

对不起,Tejs,相同的结果(引号仍然被编码)。 – jasongullickson

回答

4

或者,你应该改变你连接到该事件的方式:

Html.TextBoxFor(x => x.SomeProperty, new { rel = Model.QuestionID, @class = "SomeClass" }); 

然后在JavaScript中,附加到事件:

$('.SomeClass').each(function() 
{ 
    $(this).change(function() 
    { 
      var questionId = $(this).attr('rel'); 
    }); 
}); 
+0

我会试试这个,谢谢! – jasongullickson

+0

这个工程,虽然我仍然想知道如何(如果?)有一种方法来阻止Razor从编码的一切(我相信它会再次来:) – jasongullickson

+0

https://stackoverflow.com/questions/ 22507671 /自举日期选择器,转换日期事件犯规,火上时,手动编辑最新 –

-1

尝试使用单引号,不需要转义字符。

@Html.TextBoxFor(model => answer.Value, new { @class = "answerinput", @onchange = "submitAnswer('" + Model.QuestionID.ToString() + "')" }); 
+1

是的,我给了这个镜头,结果是相似的(但是对于单引号字符有不同的编码)。 – jasongullickson