如何在MVC中的强类型视图中通过存储过程绑定数据库中的下拉值...?

时间:2016-06-05 16:40:29

标签: c# asp.net asp.net-mvc

我有一个强类型视图,如下所示:

  <div class="form-group">
      @Html.LabelFor(model => model.Text, htmlAttributes: new { @class = "control-label col-md-2" })
         <div class="col-md-10">

             @Html.DropDownListFor(model => model.Text, "Drop");    @*Error Line*@

               @Html.ValidationMessageFor(model => model.Text, "", new { @class = "text-danger" })
            </div>

使用下面的模型Class DropdownCheck:

 public class DropdownCheck
 {
    public string Text { get; set; }
    public String Test { get; set; }
 }

基本上,我不想硬编码值来查看列表项,但希望通过存储过程从数据库绑定它。

所以,为此,我有如下控制器

   [HttpGet]
    public ActionResult Dropdown()
    {
        BusDataContext dtnew=new BusDataContext();
        ViewBag.Drop = new SelectList(dtnew.Bind_Dropdown().ToList(), "BusSrlNo", "Name");
        return View();
    }

同样在ViewBag中存储下拉列表ID,文本如上所示。 其中Bind_Dropdown()如下所示

  public IEnumerable<DropdownValues> Bind_Dropdown()
   {
       var res = dt.Get_Bus_Dropdown().ToList();
       List<DropdownValues> drop = new List<DropdownValues>();

       for (var i = 0; i < res.Count; i++)
       {
           DropdownValues name = new DropdownValues();
           name.drpbusid = Convert.ToInt32(res[i].BusSrlNo);
           name.drpbusname = Convert.ToString(res[i].Name);
           drop.Add(name);
       }
       return drop;
   }

其中DropdownValues是如下所示的类:

   public class DropdownValues
{
    public int drpbusid { get; set; }
    public string drpbusname { get; set; }
}

存储过程返回下拉值,Text返回BusSrlNo和Name。 完成所有这些工作之后,获得如下的错误编译: :

  

CS1928:&#39; System.Web.Mvc.HtmlHelper&#39;才不是   包含&#39; DropDownListFor&#39;的定义和最好的扩展   方法过载   &#39; System.Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper,   System.Linq.Expressions.Expression&gt;中   System.Collections.Generic.IEnumerable)&#39;   有一些无效的论点

2 个答案:

答案 0 :(得分:1)

1)改变这一行:

ViewBag.Drop = new SelectList(dtnew.Bind_Dropdown().ToList(), "BusSrlNo", "Name");

进入这个:

ViewBag.Drop = new SelectList(dtnew.Bind_Dropdown().ToList(), "drpbusid", "drpbusname");

2)改变这一行:

@Html.DropDownListFor(model => model.Text, "Drop"); 

进入这个:

@Html.DropDownList("anyName", ViewBag.Drop as SelectList)

我已经将你的错误复制到了我身边,这是我必须做的唯一两项改变才能让它发挥作用。我希望它对你有帮助。

答案 1 :(得分:0)

我不熟悉您尝试使用的签名(.NET可以绑定像这样的字符串中的值吗?)

@Html.DropDownListFor(model => model.Text, "Drop");    @*Error Line*@

如果将其切换为:

会发生什么
@Html.DropDownListFor(m => m.Text,
 ((IEnumerable<SelectListItem>)ViewBag.Drop.Items))