加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 具有DropDownList的可重用编辑器模板,用于业务

发布时间:2020-12-16 07:03:46 所属栏目:asp.Net 来源:网络整理
导读:我正在使用带有Razor视图的MVC3,并希望为我的几个类构建可重用的DropDownLists,但经过大量搜索后,我还没有找到一个能够完全满足我需要它的例子…… 对于这个例子,我有两个这样的类: – public class Person{ public int ID { get; set; } public string Nam
我正在使用带有Razor视图的MVC3,并希望为我的几个类构建可重用的DropDownLists,但经过大量搜索后,我还没有找到一个能够完全满足我需要它的例子……

对于这个例子,我有两个这样的类: –

public class Person
{
  public int ID { get; set; }
  public string Name { get; set; }
  public Group Group { get; set; }
}

public class Group
{
  public int ID { get; set; }
  public string Name { get; set; }
}

我有一个工作的Controller / View for Person.该视图有一个DropDownListFor控件:

@model Person

...

@Html.DropDownListFor(o => o.Group.ID,(ViewData["groups"] as SelectList))

视图直接使用Person类,而不是中间模型,因为我没有找到令人信服的理由在此阶段从另一个中抽象出一个.

以上工作正常…在控制器中我从视图返回的Person中获取Group.ID中的值,查找它,并将Person.Group设置为结果.工作,但不理想.

我在这里找到了一个活页夹:MVC DropDownList values posted to model aren’t bound将为我解决这个问题,但我还没有那个工作……因为只有我可以重用它才真正有用.

我想做的是在模板中有这样的东西: –

@model Group

@Html.DropDownListFor(o => o.Group.ID,(ViewData["groups"] as SelectList))

并在这样的视图中使用它: –

@Html.EditorFor(o => o.Group)

但是上面似乎不起作用……上面的EditorFor行插入了整个类的编辑器(例如,也是Group.Description的文本框)…而不是插入我的组列出的DropDownList

我在Views / Shared / EditorTemplates下的一个名为Group.cshtml的文件中有上述模板

如果这样做,那么每当类具有Group类型的属性时,默认情况下将使用此DropDownList编辑器(或者至少如果由某个属性指定)

提前感谢您提供的任何建议……

解决方法

您可以创建下拉列表用户控件来处理此问题.在Shared文件夹下,创建一个名为EditorTemplates的文件夹,并将用户控件放在那里.按照惯例,MVC在Shared / EditorTemplates中查找任何编辑器模板.您可以覆盖查找编辑器模板的位置,但我不会在此处进行操作.

一旦创建了用户控件,就需要使用“UIHint”属性修饰相应的属性,以告诉引擎它应该为该属性使用哪个编辑器.

以下是一个示例实现.

在Shared / EditorTemplates文件夹中,您的用户控件(在本例中为_GroupsDropDown.cshtml)如下所示:

@model Group

@Html.DropDownListFor(o => o.ID,(ViewData["groups"] as SelectList))

修改Person中的Group属性以添加UIHint属性,如下所示:

**[UIHint("_GroupsDropDown")]**
public Group Group { get; set; }

在您的控制器中,您需要

ViewData["groups"] = new SelectList(<YourGroupList>,"ID","Name");

获得上述代码后,您可以按照自己的意愿使用EditorFor语法.

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读