Asp.net mvc 2 ASP.NET MVC 2外键列表的强类型部分视图-传入什么类型?

Asp.net mvc 2 ASP.NET MVC 2外键列表的强类型部分视图-传入什么类型?,asp.net-mvc-2,partial-views,Asp.net Mvc 2,Partial Views,我想将下拉列表的项目列表传递到强类型局部视图中。父视图使用ViewModel类,该类包含我要设置的值的属性以及关联下拉列表应包含的选项列表 我的ViewModel看起来像: public class EntityFormViewModel { private MyDBEntity Entity { get; set; } // *** The list of options. *** public SelectList DataTypeSelectList { get;

我想将下拉列表的项目列表传递到强类型局部视图中。父视图使用ViewModel类,该类包含我要设置的值的属性以及关联下拉列表应包含的选项列表

我的ViewModel看起来像:

public class EntityFormViewModel
{
    private MyDBEntity Entity { get; set; }

    // *** The list of options. ***
    public SelectList DataTypeSelectList { get; private set; }

    public int EntityId { get; set; }
    public byte FormatId { get; set; }

    // *** The property the options relate to. ***
    [UIHint("DataTypesDropDownST")]
    public string DataType { get; set; }
    // Other properties snipped...


    public EntityFormViewModel(EntityModel db, int Id)
    {
        Entity = db.MyDBEntity.First(e => e.EntityId == Id);
        DataTypeSelectList = new SelectList(db.SDDS_DataType.ToList(), "DataType", "Description", this);

        EntityId = Entity.EntityId;
        FormatId = Entity.FormatId;
        DataType = Entity.DataType;
        // Etc ...
    }

    public void Update(EntityModel db)
    {
        Entity.EntityId = EntityId;
        Entity.FormatId = FormatId;
        Entity.DataType = DataType;
        // Etc ...

        db.SaveChanges();
    }
};
我在EditorTemplates/DataTypesDropDown.ascx中的部分视图如下所示

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

<!-- Doesn't work. -->
<%= Html.DropDownListFor(m => Model, Model.DataTypeSelectList) %>

<!-- Doesn't work either. -->
<!-- <% Html.DropDownListFor(m => Model, Model.DataTypeSelectList); %> -->
从属性的返回值控制传递到局部视图的类型这一事实派生出的思想;整个模型没有通过,这是我之前的错误。因此,我返回一个类型,该类型包含局部视图所需的所有内容。新的局部视图是

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

<%: Html.DropDownListFor(m => m.DataType, Model.DataTypeSelectList) %>
但是,表单现在呈现时该字段完全不存在。我尝试在局部视图中包含静态文本,但即使这样也没有呈现


谢谢你的帮助。当然,在主视图中强烈键入选项列表并不难,而不是:

<%: Html.EditorFor(m => m) %>
使用:

它是等效的,但可读性更强


至于编辑器模板不呈现的原因,您在模型上使用了UIHint属性。这意味着它将查找~/Views/Home/EditorTemplates/DataTypesDropDownST.ascx。确保此文件位于该位置,并且包含更新中显示的代码。

好的,因为我在这里没有得到答案,我想这里没有人知道!但是,这里有一个答案:

我完全正确地认为问题是因为默认的MVC框架模板匹配只支持简单类型。但是,简单的解决方案只是告诉它要使用什么模板:

<%: Html.EditorFor(m => m.DataTypeAndOpts, "DataTypesDropDownST") %>
DataTypesDropDownST是部分视图名称


然而,我仍然不知道为什么它不能与EditorForModel和[UIHint]一起工作。当然,UIHint所做的工作与上述代码完全相同?

Darin,非常感谢您抽出时间回答我的问题,并传递EditorForModel提示。我已经用你的建议更新了源代码。我的DataTypesDropDownST.ascx文件已在您建议的位置。我怀疑它没有被呈现,因为关联的属性不是简单类型,所以从下拉列表返回的值不能转换为属性的类型,即使属性只关心字符串。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApp.Controllers.DataTypeOptsAndVal>" %>

<%: Html.DropDownListFor(m => m.DataType, Model.DataTypeSelectList) %>
<%: Html.EditorFor(m => m) %>
<%: Html.EditorForModel() %>
<%: Html.EditorFor(m => m.DataTypeAndOpts, "DataTypesDropDownST") %>