C# 当需要使用两种类型的强类型时,该怎么办
我是mvc的新手,我正在设计一些类似博客的web应用程序,我想从更多的经验中了解一件事。问题是我有一个博客文章的视图和一个输入评论的框。完美、抽象的解决方案是用一类文章和评论强烈地输入这个视图,但正如我们所知,这是不可能的。 处理这个案件的最佳方式是什么?因为它是文章的视图,所以应该使用article类键入它。另一方面,使用comment类键入它和使用ViewBag传递文章字段会更容易。我不认为它是正确的,因为从逻辑上讲,它不应该用一个类来类型化,这个类在这里没有直接表示(本文是主要的) 还有什么其他可能的解决方案可以轻松添加和验证评论,并以清晰的方式进行? 提前谢谢 编辑:主要的“问题”不是处理现有注释列表,而是添加新注释-在这种情况下,我可以在控制器端轻松使用ViewModel FormCollection吗 完美、抽象的解决方案是用一类文章和评论强烈地输入这个视图,但正如我们所知,这是不可能的 但这是可能的。它被称为ViewModel 你似乎有点迷恋CRUD模型。它看起来是主流,但那是因为它是唯一适合代码生成和模板化的方法 为了获得更好的视角,请查看标准MVC模板中的AccountModels 完美、抽象的解决方案是用一类文章和评论强烈地输入这个视图,但正如我们所知,这是不可能的 但这是可能的。它被称为ViewModel 你似乎有点迷恋CRUD模型。它看起来是主流,但那是因为它是唯一适合代码生成和模板化的方法 为了获得更好的视角,请查看标准MVC模板中的AccountModels 使用新型号:C# 当需要使用两种类型的强类型时,该怎么办,c#,asp.net-mvc,asp.net-mvc-3,model-view-controller,C#,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,我是mvc的新手,我正在设计一些类似博客的web应用程序,我想从更多的经验中了解一件事。问题是我有一个博客文章的视图和一个输入评论的框。完美、抽象的解决方案是用一类文章和评论强烈地输入这个视图,但正如我们所知,这是不可能的。 处理这个案件的最佳方式是什么?因为它是文章的视图,所以应该使用article类键入它。另一方面,使用comment类键入它和使用ViewBag传递文章字段会更容易。我不认为它是正确的,因为从逻辑上讲,它不应该用一个类来类型化,这个类在这里没有直接表示(本文是主要的) 还有什
public class ArticleAndCommentsModel {
public ArticleModel Article { get; set; }
public IEnumerable<CommentModel> Comments { get; set; }
}
公共类文章和评论模型{
公共物品模型物品{get;set;}
公共IEnumerable注释{get;set;}
}
您的视图将继承ViewPage
使用新模型:
public class ArticleAndCommentsModel {
public ArticleModel Article { get; set; }
public IEnumerable<CommentModel> Comments { get; set; }
}
公共类文章和评论模型{
公共物品模型物品{get;set;}
公共IEnumerable注释{get;set;}
}
您的视图将继承
ViewPage
您将在此实例中使用ViewModel。大概是这样的:
public class Article
{
public string Text { get; set; }
}
public class Comment
{
public string Text { get; set; }
}
public class BlogPostViewModel
{
public Article Article { get; set; }
public IEnumerable<Comment> Comments { get; set; }
}
@model BlogPostViewModel
@* you can reference Model.Article, as well as Model.Comments here *@
下面是一个很好的工作示例
编辑:然后,对于接收发布数据的操作方法:
[HttpPost]
public ActionResult YourBlogView(BlogPostViewModel bpvm)
{
// here you have access to the binded model
// i.e. bpvm.Article
}
在此实例中,您将使用ViewModel。大概是这样的:
public class Article
{
public string Text { get; set; }
}
public class Comment
{
public string Text { get; set; }
}
public class BlogPostViewModel
{
public Article Article { get; set; }
public IEnumerable<Comment> Comments { get; set; }
}
@model BlogPostViewModel
@* you can reference Model.Article, as well as Model.Comments here *@
下面是一个很好的工作示例
编辑:然后,对于接收发布数据的操作方法:
[HttpPost]
public ActionResult YourBlogView(BlogPostViewModel bpvm)
{
// here you have access to the binded model
// i.e. bpvm.Article
}
我可以看到两种选择
其他人建议的
ViewModel
方法的替代方法是将文章
放在ViewBag
中,并从那里引用它,让注释
成为页面的模型。这假设用户不修改文章。其他人建议的视图模型
方法的替代方法是将文章
放在视图包
中,从那里引用它,并让注释
成为页面的模型。这假设用户不修改文章。为什么不使用一个包含post和comments类的BlogPost类呢?我认为合成是一个更好的解决方案,但是您可以继承多个接口而不是多个类。允许多接口继承。为什么不使用一个包含post和comments类的BlogPost类呢?我认为组合是一个更好的解决方案,但是您可以继承多个接口而不是多个类。允许多接口继承。好的,但我的问题(主要)是在同一视图中添加注释。在这种情况下,我可以在控制器端使用FormCollection来处理这个新的吗?@deha您可以使用输入(无论是直接DOM还是InputExtensions)将这个新数据(注释)传递给POST操作。您可以展示一些简单的代码示例吗?我主要对控制器方法参数感兴趣…@deha我已经编辑了我的帖子来展示简单的控制器操作方法。所以我猜BlogPostViewModel应该包含像NewComment这样的字符串字段,并在视图中为其呈现编辑器?好的,但我的问题(主要)是在同一视图中添加注释。在这种情况下,我可以在控制器端使用FormCollection来处理这个新的吗?@deha您可以使用输入(无论是直接DOM还是InputExtensions)将这个新数据(注释)传递给POST操作。您可以展示一些简单的代码示例吗?我主要对控制器方法参数感兴趣…@deha我编辑了我的帖子来展示简单的控制器操作方法。所以我猜BlogPostViewModel应该包含像NewComment这样的字符串字段,并在视图中为它呈现编辑器?