在Webmatrix中使用asp.net我创建了一个下拉菜单,您可以在其中选择一个状态,然后根据该选择,还有另一个下拉菜单供用户选择该状态内的区域。
我遇到的问题是,在发布数据时,它会为未选择的其他区域添加一堆逗号。我可以看到这是怎么回事,区域的每个选择标签都有name =“Region”,但是我不知道如何修复这个,div标签它们都嵌套在我不能使用'name'属性。如果某个地方没有名称,则区域字段不会发布到数据库中。
这是html代码:
<label>State:</label>
<select class="stareg" id="SelectState" name="State" size="1">
<option value="">Please Select</option>
<option value="ACT">A.C.T.</option>
<option value="NSW">New South Wales</option>
<option value="NT">Northern Territory</option>
<option value="QLD">Queensland</option>
<option value="SA">South Australia</option>
<option value="TAS">Tasmania</option>
<option value="VIC">Victoria</option>
<option value="WA">Western Australia</option>
</select>
<label>Region:</label>
<div id="SelectRegion">
<div>
<div>
<select class="stareg" name="Region">
<option value="">Please Select</option>
</select>
</div>
</div>
<div id="VIC" style="display: none;">
<div id="VICReg">
<select class="stareg" id="VICRegs" name="Region">
<option value="">Please Select</option>
<option value="Melbourne & Inner Suburbs">Melbourne & Inner Suburbs</option>
<option value="East & South East">East & South East Suburbs</option>
<option value="Geelong">Geelong</option>
<option value="Gippsland">Gippsland</option>
<option value="Mornington Peninsula">Mornington Peninsula</option>
<option value="North & West Suburbs">North & West Suburbs</option>
<option value="Yarra Valley & Dandenong Ranges">Yarra Valley & Dandenong Ranges</option>
<option value="Regional Victoria">Regional Victoria</option>
</select>
</div>
</div>
<div id="NSW" style="display: none;">
<div id="NSWReg">
<select class="stareg" id="NSWRegs" name="Region">
<option value="">Please Select</option>
<option value="Sydney & Inner Suburbs">Sydney & Inner Suburbs</option>
<option value="Central West">Central West</option>
<option value="Hunter">Hunter</option>
<option value="North Coast">North Coast</option>
<option value="South Coast">South Coast</option>
<option value="Southern Inland">Southern Inland</option>
<option value="Western Sydney">Western Sydney</option>
<option value="Regional N.S.W.">Regional N.S.W.</option>
</select>
</div>
</div>
<div id="QLD" style="display: none;">
<div id="QLDReg">
<select class="stareg" id="QLDRegs" name="Region">
<option value="">Please Select</option>
<option value="Brisbane & Inner Suburbs">Brisbane & Inner Suburbs</option>
<option value="Bundaberg">Bundaberg</option>
<option value="Cairns">Cairns</option>
<option value="Gold Coast">Gold Coast</option>
<option value="Mackay">Mackay</option>
<option value="Sunshine Coast">Sunshine Coast</option>
<option value="Townsville">Townsville</option>
<option value="Regional QLD">Regional QLD</option>
</select>
</div>
</div>
<div id="SA" style="display: none;">
<div id="SAReg">
<select class="stareg" id="SARegs" name="Region">
<option value="">Please Select</option>
<option value="Adelaide & Inner Suburbs">Adelaide & Inner Suburbs</option>
<option value="Adelaide Hills">Adelaide Hills</option>
<option value="Barossa">Barossa</option>
<option value="Clare Valley">Clare Valley</option>
<option value="Eyre Peninsula">Eyre Peninsula</option>
<option value="Fleurieu Peninsula">Fleurieu Peninsula</option>
<option value="Kangaroo Island">Kangaroo Island</option>
<option value="Limestone Coast">Limestone Coast</option>
<option value="Murraylands">Murraylands</option>
<option value="Yorke Peninsula">Yorke Peninsula</option>
<option value="Regional S.A.">Regional S.A.</option>
</select>
</div>
</div>
<div id="WA" style="display: none;">
<div id="WAReg">
<select class="stareg" id="WARegs" name="Region">
<option value="">Please Select</option>
<option value="Perth & Inner Suburbs">Perth & Inner Suburbs</option>
<option value="Great Southern">Great Southern</option>
<option value="Peel">Peel</option>
<option value="South West">South West</option>
<option value="Regional W.A.">Regional W.A.</option>
</select>
</div>
</div>
<div id="ACT" style="display: none;">
<div id="ACTReg">
<select class="stareg" id="ACTRegs" name="Region">
<option value="">Please Select</option>
<option value="Canberra & Inner Suburbs">Canberra & Inner Suburbs</option>
<option value="Other Area A.C.T">Other Area A.C.T</option>
</select>
</div>
</div>
<div id="TAS" style="display: none;">
<div id="TASReg">
<select class="stareg" id="TASRegs" name="Region">
<option value="">Please Select</option>
<option value="Hobart & Inner Suburbs">Hobart & Inner Suburbs</option>
<option value="Davenport">Davenport</option>
<option value="Launceston">Launceston</option>
<option value="Regional Tasmania">Regional Tasmania</option>
</select>
</div>
</div>
<div id="NT" style="display: none;">
<div id="NTReg">
<select class="stareg" id="NTRegs" name="Region">
<option value="">Please Select</option>
<option value="Darwin & Inner Suburbs">Darwin & Inner Suburbs</option>
<option value="Regional N.T.">Regional N.T.</option>
</select>
</div>
</div>
</div>
这是jquery脚本:
$(function () {
$('#SelectState').change(function () {
$('#SelectRegion > div').hide();
$('#SelectRegion').find('#' + $(this).val()).show();
});
});
除了发送到数据库的其他逗号外,一切都按照我想要的方式工作。有没有办法用一个名称包装所有区域选择标记,还是需要更高级的脚本?任何帮助将不胜感激。
答案 0 :(得分:3)
您的问题是因为您对所有选择控件使用相同的name
参数控制:name="Region"
,因此所有这些参数都会一起发布。为什么?因为参数名称已回发,并且您在所有参数名称上都使用相同的名称,因此它们与逗号混合在一起。空白的逗号是你隐藏的那个,如果我理解的话,它们就不再被选中了。
从我看到你知道你做了什么的那一刻起,我就可以建议你一个可能的解决方案,你可以按照自己的方式去做。
当您在javascript上设置.show()
时,请使用name=""
更改所有选择,并仅使用name="Region"
保留可见的选项。
javascript上的代码可以是:
$(function () {
$('#SelectState').change(function ()
{
$('#SelectRegion > div').hide();
// show the selected
$('#SelectRegion').find('#' + $(this).val()).show();
// remove the name from all that have the class stareg
$('.stareg').attr('name', '')
// set only to visible the class name
$('#SelectRegion').find('#' + $(this).val() + 'Regs').attr('name', 'Region')
});
});
我没有页面,所以可能需要一些tweek,我不确定最后一行是否找到了正确的select控件来设置Region。此外,我使用stareg
类从所有选择中删除名称 - 但不要对该页面上的其他控件使用相同的类。