使用ASP.NET MVC Razor进行自定义控件

Fab*_*zio 19 asp.net-mvc razor asp.net-mvc-3

如何在ASPNET.MVC Razor中使用自定义控件?

我想在Razor视图上使用自定义控件.例如:

<mycontrols:something>@Model.MyVar</mycontrols:something>
Run Code Online (Sandbox Code Playgroud)

要么

<mycontrols:something myattribute="@Model.MyVar" />
Run Code Online (Sandbox Code Playgroud)

请注意,我的目标是仅使用从MvcControl派生的少数控件,仅用于琐碎的重复ui内容.

我试图在视图的顶部找到类似于@Register的语法,但没有任何成功.

然后我去了web.config,添加

<pages>
   <controls>
      <add tagPrefix="mycontrols" namespace="mynamespace" assembly="myassembly"/>
   </controls>
</pages>
Run Code Online (Sandbox Code Playgroud)

但看起来在渲染时会忽略自定义控件.

有人可以帮忙吗?

...可能有点老式,但有时也可以使用自定义控件来使代码更清洁!

mar*_*ind 19

Razor语法根本不支持控件的概念.如果要使用控件,则必须使用ASPX(WebForms)语法.

但是,推荐的MVC模式是使用html辅助函数或部分视图.在Razor中,您还可以使用@helper快速辅助函数的语法.


Dar*_*rov 10

在ASP.NET MVC中应该避免使用自定义服务器控件.他们中的大多数都依赖于ViewState和PostBack,它们是MVC中不再存在的概念.您应该更喜欢使用模板,HTML帮助程序来实现一些可重用的功能.控件的另一个问题是它们中的大多数封装了一些业务逻辑,这些业务逻辑从某处获取数据并呈现它是一种反MVC模式.在MVC中,控制器有责任操纵模型并获取数据并将视图模型传递给视图,该视图应该只显示它​​.

  • @Fabrizio即使你有足够的理由想要在MVC中使用控件,它们根本不适用于Razor,因为它使用的页面模型不适用于控件.无论您对使用控件的感受如何,它们几乎不可能在Razor中使用. (5认同)

Tom*_*son 6

MVC使用部分视图而不是自定义控件,它们可以以两种方式使用,几乎涵盖了自定义控件可以执行的所有操作

  • RenderPartial,用于呈现页面控制器已检索的数据
  • RenderAction类似但有自己的控制器动作,因此可以独立获取数据

我可以想到的唯一情况是,在mvc视图上放置自定义控件的价值在于,如果您正在处理部分迁移的webforms项目,我怀疑它可以用于除WebFormsViewEngine以外的任何其他内容.