2013-10-25 74 views
0

我有一個Javascript數組的字符串,我試圖創建一個HTML表格來包含這些字符串旁邊的下拉菜單。asp.net mvc - 如何使用Javascript創建多個DropDownLists

$.each(data, function (key, val) { 
     var tr = $("<tr></tr>"); 

     $("<td>"+ val + "</td>").appendTo(tr); 
     var tmp = '<td>'+'@(Html.DropDownList("SomeDropdown", (SelectList)ViewBag.SomeList))'+'</td>'; 
     //var tmp = "<td><select><option value="0">Other</option></select> </td>"; 
     $(tmp).appendTo(tr); 
     tr.appendTo("#tableData"); 
    }); 

使用HTML工作正常,但當我使用剃鬚刀嘗試相同的事情時,我得到異常:「未終止的字符串常量」。 即使這樣做,新的問題將是所有的DropDownlists將在生成的HTML中具有相同的名稱和ID。 有沒有更好的方法來完成這個?


我想爲我的DropDownList使用Razor的主要原因是使用我的ViewBag。

這個想法是使用HTML和我的ViewBag創建一個下拉列表,並在需要時使用一個新的ID克隆它。

的JavaScript:

 var i = 0; 
    var prefix = 'pre'; 
    $.each(data, function (key, val) { 
     var tr = $('<tr></tr>'); 

     var td = $('<td></td>'); 
     i++; 
     var tmp = $("select:first").clone().attr("id", prefix+i); 
     tmp.appendTo(td); 
     td.appendTo(tr); 
     $(td).appendTo(tr); 

     tr.appendTo('#tableData'); 
    }); 

的HTML(我包裹在一個隱藏的div 「原始」 的下拉菜單,因爲它是隻需要複製):

<div style="display:none"> 
<select class="selector"> 
    @foreach (var item in ViewBag.SomeList) 
    { 
     <option value="@item.Value"> 
      @item.Text 
     </option> 
    } 
</select> 
</div> 
+0

你可以分享一些剃刀和JavaScript代碼? – 111

回答

2

不能在使用剃刀這種情況,因爲Razor在將服務器端發送給客戶端之前使用服務器端來生成正確的html。 @Html.DropDownList不能這樣執行,你的瀏覽器不理解它。你最好堅持一個HTML解決方案。

如果您真的想爲此使用Razor,您可以向您的服務器發出ajax請求,它會返回包含您的DropDownList的部分視圖,您可以將其插入到任意位置。但這意味着與您的服務器通信,這可能不是您想要的。

0

我會去找你已經有的解決方案。但我想你也可以使用剃鬚刀幫手。這樣

<div id='hiddenDiv' style="display:none"> 
    @(Html.DropDownList("SomeDropdown", (SelectList)ViewBag.SomeList)) 
</div> 

而JavaScript

$.each(data, function (key, val) { 
     var tr = $("<tr>"); 
     $("<td>"+ val + "</td>").appendTo(tr); 
     $('<td>').append($("#hiddenDiv").find('select').first().clone().attr("id", prefix+(i++)).appendTo(tr); 
     tr.appendTo("#tableData"); 
});