c#mvc4如何将类的对象分配到DropDownListFor中

时间:2016-11-01 00:01:01

标签: c# asp.net-mvc razor

如何将类的对象而不是字符串值分配到DropDownListFor中?以下是如何工作的例子。

模型:

public class Language
{
    public int Id {set; get;}
    public string Index {set; get;}
    public string Name { set; get;}  
}

控制器:

public LanguageController : Controller
{
    public ActionResult show( Language lang = null )
    {
        return View( lang );
    }

    // i try something like that and dont working, 
    // that show list of language but razor form call controler method with empty parameter
    public static List<SelectListItem> ListOfLanguages()
    {
        List<SelectListItem> list = new List<SelectListItem>();
        foreach ( Language l in _languageRepository.Languages )
        {
            list.Add( new SelectListItem()
            {
                Value = l.Index,
                Selected = false,
                Text = l.Name
            });
        }
        return list;
    }
}

视图:

@using( html.beginform( "show", "LanguageController" ) )
{
    @Html.DropDownListFor(x => x.Language, ListOfLanguages() )
    <input type="submit" >
}
抱歉,但我不知道如何解释

3 个答案:

答案 0 :(得分:0)

您只需将项目传递给视图即可。一种方法是使用视图模型。

public class ShowLanguageVm
{
  public List<SelectListItem> Languages { set;get;}
  public string Language { set;get;}
}

如果您的视图已有视图模型,只需将Languages属性添加到该视图中。

现在,在您的GET操作中,创建一个此对象,调用您的ListOfLanguages方法并设置Languages集合。将视图模型对象传递给视图。

public ACtionResult Show(string Language ="")
{
   //to do : Do something with the value of Language  if it is not null
   var vm=new ShowLanguageVm();
   vm.Languages = ListOfLanguages();
   return View(vm);
}

在我们的ShowLanguageVm类中强类型的视图中,您可以使用Html.DropDownListFor辅助方法来呈现语言下拉列表。

@using(Html.BeginForm("Show","Language"))
{
    @Html.DropDownListFor(s=>s.Language,Model.Languages)
    <input type="submit" />
}

答案 1 :(得分:0)

您的视图无法从控制器访问方法,这是分离MVC的全部想法。

您需要将控制器操作中的<div> <h2>Bar Graph Example</h2> <img src="@Url.Action("MyBarGraph")" alt="SimpleChart" /> </div> 传递给支持方法之一的视图:

1-通过强类型模型,就像@Shyju在他的回答中所示 2-通过SelectList变量,它是一个动态对象,允许您使用名称设置变量并在视图中使用相同的名称,例如:

ViewBag

在你看来:

public LanguageController : Controller
{
    public ActionResult show( Language lang = null )
    {
        ViewBag.LanguageList = ListOfLanguages();
        return View( lang );
    }

    // i try something like that and dont working, 
    // that show list of language but razor form call controler method with empty parameter
    public static List<SelectListItem> ListOfLanguages()
    {
        List<SelectListItem> list = new List<SelectListItem>();
        foreach ( Language l in _languageRepository.Languages )
        {
            list.Add( new SelectListItem()
            {
                Value = l.Index,
                Selected = false,
                Text = l.Name
            });
        }
        return list;
    }
}

答案 2 :(得分:0)

我这样做是有效的,下面是解决方案

视图:

@Html.DropDownListFor(x => x.Language.Index, LabelController.ListOfLanguages())

控制器:

public static IEnumerable<SelectListItem> ListOfLanguages()
{
    var langs = _languageRepository.Languages.Select( x => new SelectListItem
    {
        Value = x.Index,
        Text = x.Name
    });
    return new SelectList( langs, "Value", "Text");
}

public ActionResult show( Language lang = null )
{
    lang = _languageRepository.Find(x => x.Index == label.Language.Index );        
    return View( lang );
}