首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ViewData MVC中将ViewPage传递给ViewPage

在ViewData MVC中将ViewPage传递给ViewPage
EN

Stack Overflow用户
提问于 2009-02-21 04:21:37
回答 2查看 2.5K关注 0票数 1

我正在尝试在ASP.NET MVC中构建一个自定义控件。我想避免的是在这些控件中混合视图(html)和代码(C#)。

在对这个问题进行了数小时的搜索和斗争之后,我终于想到了创建使用ASP视图引擎的助手方法,并考虑了ViewPage类。

我能够创建类的一个实例,甚至可以使用LoadControl和LoadTemplate方法加载ascx模板,但问题是,当我将ViewData对象传递给ViewPage类的实例时,我无法在ViewPage中看到ViewData,并且得到了这个错误:

'~/Components/Controls/EditableLabel/Views/EditableLabel.ascx‘ViewUserControl无法找到IViewDataContainer。ViewUserControl必须位于ViewPage、ViewMasterPage或另一个ViewUserControl中。

通常,我想要达到的最终效果是加载带有一些参数的控件,这些参数应该在模板(ascx)中可读。

示例:

代码语言:javascript
复制
<% Html.EditableLabel(Writer, "memberName", "Name", "Antonio", "/identity/updateProperty", "memberName"); %>
  1. 有办法将ViewData传递给我创建的ViewPage实例吗?
  2. 是否有更明智的方法在ASP.NET MVC中创建自定义控件/小部件?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-21 05:13:03

  1. 您可以通过“返回视图(.)”从控制器将VD传递给VP。或者通过"ViewDataname = value“。
  2. 最好使用从ViewUserControl继承的ascx控件来创建自定义控件。通过这种方式,您可以轻松地将数据传递给它: <% Html.RenderPartial("FooControl",新FooViewData(){ Name="aa",Type=“Name=”,Id = 2});%> <% Html.RenderPartial("FooControl",新FooViewData(){ Name="aa",Type=“Name=”,Id = 2},ViewData);%>

以及可以在FooViewData类中定义的所有必要参数。

如果您真的想要为HtmlHelper编写一个扩展,它将加载一些ascx控件,那么您应该看看MvcFutures中的Repeater类( MVC的源代码是这里)。但我相信在普通情况下你不需要这个。

票数 2
EN

Stack Overflow用户

发布于 2009-02-21 13:46:55

我正在和齐霍奇一起追踪这件事。然而,在第二条中,我将添加一个警告。在默认的实现中,使用中性的ASPX和ASCX作为视图,创建MVC控件(使用模板确保您的狗被中性化)是最好的选择。

现在听我的警告。ASPX和ASCX不必是视图。如果您查看Phil的博客,您将看到提到的其他视图引擎,比如Spark (使用星火视图引擎的ASP.NET MVC Northwind演示)。事实上,菲尔已经在这个条目中设置了一个使用替代视图引擎的示例:使用多个ViewEngines呈现单个视图

我并不是建议您转移到其他视图引擎,只是有一个选项,如果您找到一个更适合您的问题领域。有时,最好还是坚持“开箱即用”的实现。在本例中,使用ASCX控件保持简单。

顺便说一句,如果你真的把MVC作为你的UI故事,您应该看看MVC的codeplex项目。。这里最重要的可能是MVC.Contrib,但是列表中还有其他一些宝石。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/572268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档