【问题标题】:Move partial page property to View without code behind将部分页面属性移动到 View 而没有后面的代码
【发布时间】:2010-10-20 12:42:15
【问题描述】:

我正在重构一个使用以前版本的 Asp.Net MVC 构建的 Web 应用程序,其中所有视图每个都有 2 个代码隐藏文件。

此外,如果视图工作正常,我想开始删除文件后面的所有代码,因为它们大部分都是空的。

在代码隐藏中很少有这样的属性:

public partial class List {
    public Message NewMessage { get { return new Message(); } }
}

在完全删除它们之前(我知道这种方法与视图无关)如何在单页 aspx 或 ascx 中复制它们?
我只是尝试在 标记中复制和粘贴公共方法,但这不起作用。

【问题讨论】:

    标签: asp.net asp.net-mvc code-behind


    【解决方案1】:

    请问您最初为什么要使用这种方法?我认为您可以通过使您的View 强类型化并将消息作为ViewModel 传递来实现相同的目的。

    Inherits="System.Web.Mvc.View<Message>"
    

    如果你已经有一个强类型的View,你可以在你的类库中创建一个自定义类来为你的消息留出空间,例如

    public class ModelWithMessage  {
        public Message Message { get; set; }
        public Object Model { get; set; }
        public ModelWithMessage(Message Message, Object Model) {
            this.Message = Message;
            this.Model = Model;
        }
    }
    

    您当然也可以将该类型设为泛型,允许 ModelWithMessage&lt;T&gt; 构造并避免将 Model 强制转换为您需要的任何类型。

    另一种方法是使用TempData。在你的控制器中,设置

    TempData["Message"] = "Hello world!";
    

    然后在您的View 中,您只需使用

    <%= TempData["Message"] %>
    

    您选择哪种方法取决于您的 Message 类包含的内容。

    【讨论】:

      【解决方案2】:

      您几乎已经自己回答了这个问题,因为您说“我知道这种方法与视图无关”:)

      首先,我会将这些方法移出控制器类并在模型中传递任何所需的数据(假设这是它们的合适位置),然后当您从代码隐藏文件中删除所有功能并拥有一个再次干净分离,您可以从视图中删除代码隐藏文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-25
        • 2011-12-08
        • 1970-01-01
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多