2011-06-23 34 views
5

在我的表单中,我从一个列表框移动类别另一这样的:
enter image description here如何创建一个空的Listbox并传递选项而不选择它们?

底盒是“输入”即当表单张贴在服务器端的阅读框。以下是我创建的列表框:

<%: Html.ListBoxFor(m => m.categories, Model.categories)%> 

我在这里有两个问题:

  1. 火狐,当窗体加载首次底盒总是有一个默认​​3210。有没有可能在服务器端删除这个? IE似乎创建一个空框但不是FF。
    要解决这个问题,我将删除页面加载时的空白选项。与此相关的一个问题是,当表单发生错误而未提交时,选项会再次被删除。

  2. 为了发布底部框中的选项,他们必须被选中。为了解决这个问题,我使用了下面的jQuery来选择表单上的选项。


jQuery的选择上,提交选项:

$("form").submit(function (event) { 
    $("#categories").find("option").attr('selected', 'selected'); 
}); 

jQuery来负载删除选项:

$("#categories").find("option").remove(); 

质询
1.我可以创建一个空在所有浏览器中工作的列表框?
2.我必须选择底部框中的选项还是有解决方法?澄清:我希望尽可能在服务器端完成,最好是与MVC相关的东西。

回答

1

1:而不是删除所有选项只是删除空的,这种方式不会重置。

$('#mySelect option').each(function() { 
    if(!$(this).val()) 
     $(this).remove(); 
}); 

http://jsfiddle.net/yWHLW/5/

+0

这听起来像个好主意! – Niklas

1

1. http://jsfiddle.net/wVWGm/检查浏览器是否为空列表框。

$("form").submit(function (event) { 
    $("#categories").find("option:selected"); 
}); 
+0

'1.'这不是mvc特定的,它只是纯HTML吗?任何想法如何使用ListboxFor()渲染? '2.'这只是我的jQuery的一个更短的版本。服务器端可以做吗? – Niklas

+0

对不起,那么也许你应该改变你的两个问题,因为你没有特别指定任何东西。 –

+0

你说得对,我已经添加了一个说明。 – Niklas

1

火狐具有特殊性需要它以实际显示选择元件以创建空白元件。恐怕你无法解决这个问题。但是,#2潜在的解决方法可能会消除您对#1的担忧。

如果您在添加和删除按钮上构建jQuery点击事件处理程序,以创建和销毁具有相同名称属性的隐藏输入,以便在各个框之间进行可视移动的每个值,它们将作为CSV字符串到达​​相应的成员的Request.Form集合,它可以通过调用变成值的数组:

Request.Form("myHiddenInputName").Split({","c}) 

或者等效C#代码。您不需要选择提交的元素,也不需要担心删除Firefox在服务器端创建的空值。当然...这可能不是MVC架构中最吸引人的解决方法,但这是我的第一反应,所以我想我会分享。

0

你为什么不创建一个使用简单的HTML列表框;而不是使用帮手

<select style="width: 370px;" class="cmbBox1" id="ServicesList" 
multiple="multiple" name="ServicesList" size="8"></select> 
+0

因为如果我改变模型,它的属性,我不得不通过html搜索来改变所有的ID,手动匹配它们。如果这最终成为唯一的解决方案,我宁愿让jQuery脚本删除客户端的选项。 – Niklas

相关问题