2012-07-25 60 views
0

与剃刀语法错误HTML我有这样的javascript代码:jQuery的追加在Chrome

var markup = '<tr id="newdo" class="odd"><td>' + @Html.DropDownList("does", new SelectList(Model.Does, "Id", "Name"),new { @class = "newDoSelect" }) + '</td><td class="small">'+ @Html.DropDownList("restriction", Model.Restrictions) + '</td><td>' + @Html.ListBox("doobjectives", new MultiSelectList(Model.AllObjectives, "Id", "Name"), new { Multiple = "multiple", @class="doobjectives" }) + '</td><td></td></tr>'; 
$('#doList tr:last').after(markup); 

这是渲染代码:

var markup = '<tr id="newdo" class="odd"><td>' + <select class="newDoSelect" id="does_3_" name="does[3]"><option value="319">A breath of fresh air..</option> 
<option value="176">Fix something that&#39;s broken today!</option> 
<option value="179">Get a physical &#39;high&#39; today!</option> 
<option value="150">It&#39;s OK to be unassertive sometimes!</option> 
<option value="169">Just &#39;let it wash&#39; today.</option> 
<option value="200">WOW!</option> 
<option value="233">Write something for 15 minutes.</option> 
<option value="104">You CAN be individually-centred: try it today.</option> 
<option value="111">You can be livelier: try this.</option> 
<option value="77">You can be more definite in how you are.</option> 
<option value="58">You don&#39;t always have to be unassertive!</option> 
</select> + '</td><td class="small">'+ <select id="restriction_3_" name="restriction[3]"><option value="negative">negative</option> 
<option value="neutral">neutral</option> 
<option value="positive">positive</option> 
</select> + '</td><td>' + <select Multiple="multiple" class="doobjectives" id="doobjectives_3_" multiple="multiple" name="doobjectives[3]"><option value="4">another test</option> 
<option value="24">testing objective 10</option> 
<option value="25">testing objective 11</option> 
<option value="13">testing objective 2</option> 
<option value="14">testing objective 3</option> 
<option value="15">testing objective 4</option> 
<option value="16">testing objective 5</option> 
<option value="17">testing objective 7</option> 
<option value="19">testing objective 8</option> 
<option value="18">testing objective 9</option> 
</select> + '</td><td></td></tr>'; 
$('#doList tr:last').after(markup); 

它工作在Firefox不错,但对铬我米获得在第一行这样的错误:

未捕获的SyntaxError:意外的标识符

任何线索?

+0

很可能是有用的,包括由浏览器执行实际的Javascript而不是生成大部分HTML字符串的服务器端代码。 – 2012-07-25 12:08:53

回答

1

,不要串联:

var markup = '<tr id="newdo" class="odd"><td>@Html.DropDownList("does", new SelectList(Model.Does, "Id", "Name"),new { @class = "newDoSelect" })</td><td class="small">@Html.DropDownList("restriction", Model.Restrictions)</td><td>@Html.ListBox("doobjectives", new MultiSelectList(Model.AllObjectives, "Id", "Name"), new { Multiple = "multiple", @class="doobjectives" })</td><td></td></tr>'; 
$('#doList tr:last').after(markup); 

而且这似乎是一个可怕的方式,客户端与服务器端脚本混合。为什么不直接在服务器上构建整个标记呢?

+0

如果我没有连接,它根本不起作用,即使在firefox中:Uncaught SyntaxError:意外的标记< – joaoruimartins 2012-07-25 12:34:48

+0

因为服务器端需要使用javascript编码。如果服务器端标记生成危险字符,这将打破你的JavaScript。这就是为什么我在回答中提到这样做并不是一个好主意。 – 2012-07-25 12:35:22

0
'<tr id="newdo" class="odd"><td>' + <select 

是问题所在。你没有生成一个字符串,但试图连接字符串与HTML。所以Darin的权利 - 不要连接或连接到其他地方(“display:none”div)渲染的下拉内部html。

0

旧的,但发现了类似问题的不同解决方案。

为了得到一个HTML出所产生的对象:

@Html.DropDownList("does", new SelectList(Model.Does, "Id", "Name"),new { @class = "newDoSelect" }) 

可以使用ToHtmlString()方法,像:

@Html.DropDownList("does", new SelectList(Model.Does, "Id", "Name"),new { @class = "newDoSelect" }).ToHtmlString()