DropDownListFor未设置选定的值

时间:2010-09-09 15:41:12

标签: asp.net-mvc vb.net asp.net-mvc-2

我有一个使用HTML帮助程序DropDownListFor

显示下拉列表的视图
<%: Html.DropDownListFor(Function(model) model.Manufacturer, New SelectList(Model.ManufacturerList, Model.Manufacturer))%>

我的控制器正在传递View a ViewModel,其中包含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 个答案:

答案 0 :(得分:2)

没有得到很多答案,所以开始深入探讨如何轻松解决这个问题。同样在我的研究中,对于许多使用DropDownListFor HTML Helper的人来说,这似乎是一个常见的问题。我认为必须有一种方法可以使这个工作,因为我知道我的ViewModel中的选定值属性实际上已传递给View。所以javascript和jQuery救援,我最终尝试使用jQuery .ready函数设置所选值,并且能够成功地使其工作。所以这是我的jQuery修复:

$(document).ready(function() {

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

});

为了使这个易于理解,我使用了完整的.ready语法,或者你可以使用$(function(){'code'});

如果你想在不使用jQuery的情况下解决这个问题,你也可以使用基本的javascript语法,它看起来像这样:

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

如果你使用普通的javascript调用,请确保在页面完成时将数据加载到下拉列表中。

在任何一种情况下,所有这些代码都在做的是在客户端的下拉列表中根据模型中传入的制造商值设置所选值。

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

感谢,

答案 1 :(得分:1)

我今天在JQuery中做了类似的快速修复,以解决这个问题:

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

虽然如果需要我可以与他人分享。

我仍然希望看到这个问题的一个真正的补丁,所以很多人似乎有不同的方式,可能使用已经存在的DropDownListFor Html.helper方法的扩展方法。