2012-04-03 72 views
2

首先,我是ASP.NET MVC的新手。现在我正试图在C#Razor视图中添加下拉列表。 问题是,有无论如何直接将List()分配给@ Html.DropDownListFor ...? MyClass的是这样的MVC3中的DropDownListFor

public class MyClass 
{ 
    public int ID {get; set;} 
    public string Itemstring {get; set;} 
} 

视图模型是这样的

public class MyViewModel 
{ 
    public int ID { get; set; } 
    public List<MyClass> MyClassList {get; set; } 
} 

控制器的操作方法是这样的

public ActionResult Home() 
{ 
MyViewModel mvm = new MyViewModel() { 
new MyClass() { ID=1, Itemstring="My Item1" }, 
new MyClass() { ID=2, Itemstring="My Item2" }, 
new MyClass() { ID=3, Itemstring="My Item3" } 
} 
} 

上观看:这是我不知道如何使用

@model xyzNameSpace.Models.MyViewModel 
<div> 
@Html.DropDownListFor(x => x.ID, Model.MyClassList); 
<a href="@Url.Action("Selected")><img src="../../Content/images/selected.gif" alt="Proceed" /> </a> 
</div> 

- 因此,当用户从下拉列表中选择一个项目并单击图像时,它应该调用(或调用不确定要使用哪个单词)'Selected'操作,并且它应该将模型与选定值绑定,帮助我如何做到这一点...?

谢谢 Siri。

+0

所以,你要选择的项目从下拉列表上传到服务器时, “继续”按钮被点击? – 2012-04-03 18:44:24

回答

4

Html.DropDownListFor有6点过载,他们都采取IEnumerable<SelectListItem>作为将持有你的价值观的参数。你不能直接使用你自己的类,这就是为什么当你尝试Kyle的解决方案时你会得到这个错误。

添加到您的模型:

public List<SelectListItem> ListToUse { get; set; } 

控制器:

MyViewModel model = new MyViewModel(); 
model.MyClassList = new List<MyClass> 
{ 
    new MyClass() { ID=1, Itemstring="My Item1" }, 
    new MyClass() { ID=2, Itemstring="My Item2" }, 
    new MyClass() { ID=3, Itemstring="My Item3" } 
} 
model.ListToUse = model.MyClassList 
    .Select(x => new SelectListItem{ Value = x.ID, Text = x.Itemstring }) 
    .ToList(); 

在视图:

@Html.DropDownListFor(x => x.ID, Model.ListToUse); 

我没有测试此代码。

+0

酷似看起来像这样工作,但我会回到'所选'行动参数...? – siri 2012-04-03 20:00:22

+0

我的意思是将这是一个'MyViewModel'本身或只是选定的ID作为Int ...? – siri 2012-04-03 20:07:23

+0

不知道我明白这个问题。当你发布你的表单时,'model.ID'将填充选定的值。 – Dmitry 2012-04-03 20:07:40

0

如果我正确理解你,当你点击“继续”按钮时,你想从下拉列表中将所选项目发布到服务器上?

您将需要使用窗体来做到这一点:

@model xyzNameSpace.Models.MyViewModel 
@using(Html.BeginForm()) 
{ 
    <div> 
    @Html.DropDownListFor(x => x.ID, Model.MyClassList); 

    <input type="submit" value="Proceed" /> 
    </div> 
} 
+0

是的,这就是我想要做的。但是当我编译你的代码时会抛出以下错误。 – siri 2012-04-03 19:01:53

+0

..... MyViewModel不包含'DropDownListFor'的定义和最佳扩展方法重载。 – siri 2012-04-03 19:03:00

+0

对不起,这里是确切的错误消息:错误CS1928: “System.Web.Mvc.HtmlHelper ”不包含关于“DropDownListFor” 的定义和最佳的扩展方法过载“的System.Web .Mvc.Html.SelectExtensions。DropDownListFor (System.Web.Mvc.HtmlHelper ,System.Linq.Expressions.Expression >, System.Collections.Generic.IEnumerable )'有一些无效参数 – siri 2012-04-03 19:06:16

0

模型

public class modelname 
      { 
       public selectlist getdropdown() 
       { 
        IEnumerable<SelectListItem> EntityList = edmx.tblEntities.AsEnumerable().Select(a => new SelectListItem { Text = a.name, Value = a.id.ToString() }).ToList(); 
        return new SelectList(EntityList, "Value", "Text");    

} 
     } 

鉴于

@Html.DropDownListFor(model => model.source_entity, Model.getdropdown(), "--Select--") 

中位指示

public ActionResult home() 
     { 
      return View(new modelname()); 
     }