【问题标题】:DropDownList Binding ErrorDropDownList 绑定错误
【发布时间】:2018-01-24 18:07:02
【问题描述】:

我只是想将值绑定到下拉列表控件。我看不到任何例子,但它对我不起作用。请找到我的代码和错误并帮助我解决这个问题。

//我的模型

public class SubjectModel
{
    public int selectedid {get;set;}
    public List<SelectListItem> ddllist{get;set;}
    public SubjectModel()
    {
        ddllist = new List<SelectListItem>();
    }
}

//我的控制器

public ActionResult DropDownTest()
{

    SubjectModel model = new SubjectModel();
    model.ddllist.Add(new SelectListItem { Text = "Physics", Value = "1" });
    model.ddllist.Add(new SelectListItem { Text = "Chemistry", Value = "2" });
    model.ddllist.Add(new SelectListItem { Text = "Mathematics", Value = "3" });

    model.selectedid = 0;

    return View(model);        
}

//我的看法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@Page Language="C#" Inherits="System.Web.Mvc.ViewPage<DopDownBinding.Models.SubjectModel>"%>    

<html>
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <title>DropDownBinding</title>
</head>
<body>
    <section id="ip">

        <p>
            <label for="timezone">Subjects</label>

            @Html.DropDownListFor(model => model.selectedid, new SelectList(Model.ddllist, "SubCategoryId", "SubCategoryName", Model.selectedid))
        </p>
    </section>
</body>

执行此操作时出现此错误。

表达式树可能不包含动态操作

我是 MVC 新手,如果有问题请帮我纠正。谢谢

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-5


    【解决方案1】:

    由于SubjectModel 类中的ddllist 属性是List&lt;SelectListItem&gt;,因此您不需要为@Html.DropDownListFor 助手的第二个参数执行new SelectList(Model.ddllist, "SubCategoryId", "SubCategoryName", Model.selectedid)

    更改此语法

    @Html.DropDownListFor(
        model => model.selectedid, 
                 new SelectList(
                     Model.ddllist, 
                     "SubCategoryId", 
                     "SubCategoryName", 
                     Model.selectedid))
    

    到这里

    @Html.DropDownListFor(model => model.selectedid, Model.ddllist)
    

    你还需要删除第二行

    <%@Page 
        Language="C#" 
        Inherits="System.Web.Mvc.ViewPage<DopDownBinding.Models.SubjectModel>"%>
    

    并将此语法添加到第一行

    @model DopDownBinding.Models.SubjectModel
    

    【讨论】:

    • 感谢您的回复。但这又引发了另一个错误。 “System.Web.Mvc.HtmlHelper”没有名为“DropDownListFor”的适用方法,但似乎具有该名称的扩展方法。扩展方法不能动态调度。考虑强制转换动态参数或在没有扩展方法语法的情况下调用扩展方法。 .我试图将它转换为 (SelectListItem) Model.ddlist。但发生了不同的异常。
    • 投射后抛出另一个异常'System.Web.Mvc.HtmlHelper'不包含'DropDownListFor'的定义和最佳扩展方法重载'System.Web.Mvc.Html。 SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable)' 有一些无效参数
    • 我在我看来是否遗漏了什么。我应该包含其他内容以使用下拉列表控件吗?
    • 您的视图是否使用剃须刀引擎?视图代码的第二行看起来像 ASP.NET MVC 2
    • 是的。我正在使用 Razor 引擎。我包括第二行只是为了尝试修复错误。但是添加/删除该代码没有任何区别
    【解决方案2】:

    您在 Razor 中的下拉菜单应该是

    //Model.ddllist is selectlist for your dropdown
    @Html.DropDownListFor(model => model.selectedid, Model.ddllist)
    

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多