【问题标题】:Alternatives to server controls in MVCMVC 中服务器控件的替代方案
【发布时间】:2010-10-18 09:03:30
【问题描述】:

ASP.NET MVC 中服务器控件的替代品是什么?我想做的是创建一个声明式和命令式绑定,以便我可以编写

<cc1:MyControl Header="Some Header" Content="Some Content" />

这意味着 MyControl 类的一个实例将被创建并可能呈现给

<h1>Some Header</h1>
<p>Content</p>

我不想要任何视图状态或回发废话,只想要模块化。我还希望这些模块包含在一个单独的类库中,所以 ViewUserControls 不会为我做。以正常方式使用服务器控件是可行的,但它会生成一个表单标记和一个视图状态字段,如果可以避免的话,我不想要它。

我看过this questionthis one关于如何在ASP.NET MVC中使用服务器控件,但是他们没有提供足够的答案。

编辑:我找到了答案。当我使用设计器添加用户控件时,它会自动创建一个我错过的

。如果我只是删除该标签,一切都会完美运行。

【问题讨论】:

    标签: asp.net-mvc servercontrols


    【解决方案1】:

    如果不需要在服务器表单中呈现,您仍然可以在 ASP.NET MVC 中使用所有控件

    ascx 文件和@Register 指令仍然可以很好地工作。伟大的新事物是 Html.RenderPartial 方法,它允许您将模型对象传递给局部视图 (ascx) 并使其相应地呈现。

    【讨论】:

    • 正如问题所说,我的问题是每当我创建服务器控件时,表单都会被渲染,这是我不想要的。
    • 并非所有控件都如此。这是特定控件的问题,而不是 ASP.NET MVC。
    • 我测试的控件是一个空白控件(我创建了一个 Server Control 项目,我正在使用默认的 ServerControl1 进行测试)。我如何修改它以删除视图状态?
    • 我对其进行了测试,它在运行时不会生成任何表单标签或任何其他内容。但是,VS 设计视图存在一个问题,当您将控件拖动到设计器表面时,它会创建一个
      标记。您可以在 HTML 模式下轻松删除表单标签。
    【解决方案2】:

    只是为Mehrdad答案增加了一种可能性,您可以使用扩展方法来做一个简单的控制,如下所示:

    <%= html.MyControl( "Some header", "Some content" ) %>
    
    
    <Extension()> _
    Public Function MyControl(ByVal htmlHelper As HtmlHelper, _
                             ByVal Header As String, _
                             ByVal Content As String) As String
    
    Dim sb As New StringBuilder()
    sb.AppendFormat("<h1>{0}</h1>", Header)
    sb.AppendFormat("<p>{0}</p>", Content)
    Return sb.ToString()
    End Function
    

    或者你可以像这个例子那样做一个更复杂的控件:Create an ASP.NET MVC GridView Helper Method

    【讨论】:

    • 对不起,太简单了。我希望我的用户能够使用 VS2008 设计器。
    【解决方案3】:

    除了仍然适用于 ASP.Net MVC 的控件之外,您可以使用mvc 控件。

    更新:此答案适用于 2009 年的 ASP.Net MVC 1.0。此时已过时且无关紧要。

    【讨论】:

    • 注意:您的两个链接都已损坏。
    猜你喜欢
    • 2012-12-18
    • 2020-12-27
    • 2014-04-15
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多