2010-09-09 54 views
2

我有一个显示使用HTML帮助下拉列表DropDownListForDropDownListFor不设置选定值

<%: Html.DropDownListFor(Function(model) model.Manufacturer, New SelectList(Model.ManufacturerList, Model.Manufacturer))%> 

我控制器通过查看包含制造商和ManufacturerList

Function Search(ByVal itemSrch As ItemSearchViewModel) As ActionResult 

    'some code mapping and model code' 

    Return View(itemSrch) 

End Function 
一个视图模型视图

我的ViewModel没有什么特别之处,只是用一个字符串值列表填充ManufacturerList,然后Manufacturer属性只是一个包含下拉列表中选定值的字符串值。

Public Property Manufacturer As String 

Public Property ManufacturerList() As List(Of String) 

我有这样的观点在下拉列表中设置选择的值,如果我们重新加载搜索查看的问题。当它进入搜索功能时,我检查了视图模型(ItemSearchViewModel),并且制造商使用适当的选定值填充并成功地将该值传递回搜索视图。在某些时候,传递给视图的数据似乎没有填充选定的值,想知道是否有人对这种情况发生的原因以及我能做些什么来解决这个问题有一些想法。

感谢

回答

2

没有得到太多关于这个答案,所以开始挖掘到,我怎么能解决这个问题有点轻松。同样在我的研究中,对于许多DropDownListFor HTML Helper人来说,这似乎是一个常见问题。我觉得必须有一种方法来使这个工作,因为我知道从我的ViewModel选定的值属性实际上是传递给视图。所以JavaScript和jQuery来拯救,我最终尝试使用jQuery .ready函数设置选定的值,并且能够成功地使其工作。因此,这里是我的jQuery的修复:

$(document).ready(function() { 

    $("#Manufacturer").val("<%: Model.Manufacturer %>"); 

}); 

为了使这个容易跟随我使用完整的。就绪语法,或者你可以用$(函数(){“代码”})的缘故;如果使用纯JavaScript调用请确保调用此

document.getElementByID("Manufacturer").Items.FindByValue("<%: Model.Manufacturer %>").Selected = true; 

如果要解决这个问题,而无需使用jQuery的你可以只使用基本的JavaScript语法为好,它会是这个样子当页面完成时将数据加载到下拉列表中。

在这两种情况下,所有这些代码都是通过模型中传入的Manufacturer值在客户端的下拉列表中设置所选值。

如果您有任何其他方法可以解决此问题,请告诉我,但这对我有用,希望它能帮助其他人解决问题。

感谢,

+1

感谢此...我们遇到了与DropDownListFor完全相同的问题,而这最终成为最简单的解决方案。 – sammy34 2013-05-15 00:40:33

1

我已经做了在JQuery中类似的速战速决今天来解决这个问题太:

$(document).ready(function() { 
$(".wrapper<%: Model.Language %> option[value=<%: Model.Language %>]").attr("selected","true"); 
}); 

即使我如果需要与他人共享。

我仍然希望看到这个问题的一个真正的补丁,许多人似乎有不同的方式,也许有一个已有的DropDownListFor Html.helper方法的扩展方法。