Você pode preencher o Html.DropDownList utilizando o ViewData com um objeto SelectList sem passar esse objeto para o Helper explicitamente ,você precisa apenas dar o mesmo nome para o ViewData e Html.DropDownList, para montar um exemplo vou alterar o código desse post http://www.danielfonsecacastro.com.br/post/2009/07/31/DropDownList-com-AJAX-em-ASPNET-MVC.aspx.
Vamos começar alterando a View, veja como fica o código atualizado.
Imagem 1 - Código atualizado da View "Index"
O único ponto alterado esta em destaque na imagem acima, note que utilizei a sobrecarga que recebe o nome e um valor padrão para o select.
Agora só falta alterar o nome do ViewData de “SelectList” para o nome definido no Html.DropDownList que é “CategoryId” , veja como fica o código do Controller “Home”.
public ActionResult Index()
{
ViewData["CategoryID"] = new SelectList(context.Categories, "CategoryID", "CategoryName");
return View();
}
Note que se não existir um ViewData definido uma exceção do tipo InvalidOperationException será lançada pelo Helper.
Pronto você pode rodar o projeto que tudo estará funcionando como antes, a primeira vista isso pode deixar o código confuso principalmente se você olhar somente a View,mais acredito que isso não é um problema, baixe o fonte com exemplo.
Daniel Fonseca Castro