【问题标题】:Binding DB value to drop down (using editor template) issue将 DB 值绑定到下拉列表(使用编辑器模板)问题
【发布时间】:2012-03-20 17:22:14
【问题描述】:

我为创建、编辑、删除创建了视图。我正在使用编辑器模板在视图中显示一个下拉菜单,其中包含模板中的选项。

根据我的观点(创建和编辑):

  <%: Html.EditorFor(model => model.Name) %> 
  //This is dropdown getting list from template.

问题:名称字段未显示在编辑视图中。

模板文件(NameDropDown.ascx)看起来像..

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl"%>    

<%= Html.DropDownList(
    "", 
    new SelectList(
        new SelectListItem[] 
        { 
              new SelectListItem { Value = "", Text = "" , Selected = true},
            new SelectListItem { Value = "Mark", Text = "Mark" },
            new SelectListItem { Value = "Jim", Text = "Jim" },
              new SelectListItem { Value = "Jason", Text = "Jason" }                                 
        },

        "Value", 
        "Text",
        Model
    )
) %>

在我的模型类中..

 [UIHint("NameDropDown")]
 public string Name { get; set; }

在创建视图中 - 名称下拉列表正确呈现,我可以选择一个值并保存到数据库。当我回到我的列表视图并单击编辑时,编辑视图不会显示数据库中的名称值。 (DB在表中有name值)。

【问题讨论】:

  • 你试过删除Selected = true吗?
  • 它只是没有绑定到模型中的字段。我去掉了空选项,它显示了我想要编辑的任何行的第一选择。
  • 它与我用于下拉菜单的编辑器模板有关。视图中不需要下拉的所有其他字段都没有这个问题。
  • 如果我将 Html.EditorFor 更改为 Html.DisplayFor - 它工作正常。它从数据库中获取字段的值并将其填充到编辑视图中。但 EditorFor 尝试从编辑器模板呈现下拉菜单,它以某种方式弄乱了绑定。

标签: asp.net asp.net-mvc asp.net-mvc-3 drop-down-menu mvc-editor-templates


【解决方案1】:

您的模板中似乎缺少模型类型(字符串):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl"%>

将其更改为:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>"%>

我刚刚进行了本地测试,它运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多