Asp.net mvc 2 ASP.NET MVC 2外键列表的强类型部分视图-传入什么类型?
我想将下拉列表的项目列表传递到强类型局部视图中。父视图使用ViewModel类,该类包含我要设置的值的属性以及关联下拉列表应包含的选项列表 我的ViewModel看起来像: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;
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") %>