首先,我想与您分享这篇关于ViewModel的非常有趣的文章:http: //rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applications
我有一个问题
所有ViewModel类派生自基类ex:BaseViewModel是一个好习惯,因为大多数网站/ Web应用程序都有通用的信息显示,通常在母版页中?在ASP.NET MVC中工作正常,布局(母版页)模型是BaseViewModel,每个View都有不同的ViewModel.
使用ViewModel接口的任何示例也是受欢迎的.
谢谢.Riadh
我想知道什么是最佳做法.我被告知总是创建ViewModels并且从不使用核心Model类将数据传递给Views.那讲得通.让我把事情分开.但是什么是Model与ViewModel完全相同.我应该重新创建另一个类还是只使用它.
我觉得我应该重新创造.只想知道专家说的话......
c# asp.net-mvc entity-framework entity-framework-4 asp.net-mvc-viewmodel
我有一个带有集合的ViewModel,例如:
public class CreateCampaignViewModel : ControlPanelViewModel
{
[RequiredField]
public string Name { get; set; }
public List<AdvertisementViewModel> Advertisements { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
在视图中,如果我使用它像:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
<fieldset style="z-index: 0;">
<legend>?????</legend>
<table style="width: 100%;">
<tr>
<td>
<label for="@Html.NameFor(m => m.Advertisements[i].Title)">????? ???????</label></td>
<td>@Html.TextBoxFor(m => m.Advertisements[i].Title)</td>
</tr>
</table>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,当我发布表格时我可以看到列表......
但我想将AdvertisementEditor嵌套在Partial View中,因此我的视图变为:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
Html.RenderPartial("AdvertisementEditor", Model.Advertisements[i]);
}
Run Code Online (Sandbox Code Playgroud)
和我的部分:
@model Pushed.Models.AdvertisementViewModel
<fieldset style="z-index: 0;">
<legend>?????</legend>
<table …Run Code Online (Sandbox Code Playgroud) indexing collections asp.net-mvc asp.net-mvc-partialview asp.net-mvc-viewmodel
我见过很多关于MVVM与MVC和博客的博客,他们说MVVM就像Windows中的MVC扩展.
我有一个设计问题,我已经制作了一个使用MVVM的win应用程序,现在我必须在Web中创建一个相同的应用程序,所以我决定在Asp.net中使用MVC模式,但现在我再次陷入困境.
如何在MVC中重用ViewModel?因为ViewModel具有导入命名空间System.Windows.Input.
还有其他灵魂吗?我的主要要求是重用应用程序逻辑?
我使用http://waf.codeplex.com/ WpfApplication框架作为参考.
提前致谢.
我看到很多关于强烈输入View模型数据的帖子.
我有兴趣以某种方式强烈键入View本身.
我担心返回View(xyz)的控制器操作可能会在运行时崩溃,如果视图的模型类型更改,或者视图本身的名称/位置发生更改.在我看来,MVC框架的松散耦合在这个特定领域过于苛刻,在RAD环境中变得适得其反.(没有立即通知违规变更)
如果View()调用由于缺少.cshtml文件或不可映射的模型类型而无效,是否有办法触发编译时错误?
简单的问题,但我无法弄清楚缺少什么.我有一个简单的ViewModel(它会变得更大):
public class TigerTrackingViewModel
{
public TigerTrackingViewModel()
{
this.TigerTrail = new TigerTrail();
}
public Guid YouthGuid { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public TigerTrail TigerTrail { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
TigerTrail是一个嵌套对象.以下是所有属性和子属性:
public class TigerTrail
{
public TigerTrail()
{
DoneDate = new DateTime(1950, 01, 01);
TigerTrailRequiredBadges = new Collection<TigerTrailRequiredBadge>();
TigerTrailElectivedBadges = new Collection<TigerTrailElectiveBadge>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; …Run Code Online (Sandbox Code Playgroud) 我最近IList<T>在一个存储库方法调用中发布了一个关于Ninject没有注入的问题,该调用返回IList<T>一个视图模型构造函数,给出的答案是注入某种类型的存储库等.
但是,我已经读过将某个存储库等注入到视图模型的构造函数中的某个地方被认为是反模式(不记得是出于什么原因).
Dave Thieben先生说,如果我按照MVC或MVP中的方式使用ViewModel模式,那么视图模型应该没有注入其构造函数的依赖项,而是应该通过Controller内的Property Injection来填充它.主持人.
遵循规则"完全注入该类需要履行其职责",ViewModel所需的所有内容都是基于托管内容的用户对象列表.那么为什么不通过Constructor Injection直接注入,而不是通过Property Injection注入?
c# asp.net-mvc dependency-injection viewmodel asp.net-mvc-viewmodel
在我的MVC应用程序中,我在域模型中定义了DataAnnotations.尽管在使用域模型时可以检索DataAnnotations属性作为Display等,但在ViewModel上使用相同的属性并使用此ViewModel时,无法检索它们.我认为再次在ViewModel中定义DataAnnotations似乎并不好.那么,我应该遵循哪种方式?
领域模型:
public class Issue
{
[Key]
public int ID { get; set; }
[Required(ErrorMessage = "Required")]
[Display(Name = "Project Number")]
public int ProjectID { get; set; }
[Required(ErrorMessage = "Required")]
[Display(Name = "Issue Definition")]
public string Description { get; set; }
//... removed for brevity
//Navigation Properties:
public virtual ICollection<FileAttachment> FileAttachments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图模型:
public class IssueViewModel
{
public int ID { get; set; }
public int ProjectID { get; set; }
public string Description { …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc domain-model data-annotations asp.net-mvc-viewmodel
在我的MVC应用程序中,几个视图模型几乎完全相同.而不是每次复制模型,我想我可以创建一个类而不是.我不确定的是如何在每个模型中包含该类.
例如,假设我的模型看起来像这样:
public class AccountProfileViewModel
{
public string FirstName { get; set; }
public string Lastname { get; set; }
public AccountProfileViewModel() { }
}
Run Code Online (Sandbox Code Playgroud)
但我知道FirstName和LastName将在许多模型中广泛使用.所以,我在其中创建了一个带有AccountProfile的类库:
namespace foobar.classes
{
public class AccountProfile
{
public string FirstName { get; set; }
public string Lastname { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
回到模型中,我将如何包含该类,以便FirstName和LastName在模型中,但不是专门创建的?
在viewmodel视图中使用的跟随应该显示为StartDate,例如9/30/2015。但它显示为9/30/2015 12:00:00 AM。我怎样才能使它不显示时间,同时使用 DataAnnotaion?我知道我只能使用@Model.StartDate.ToString("MM/dd/yyy")内部视图显示日期。但这意味着您必须在使用以下各项的每个视图中执行此操作ViewModel:
ViewModel:
...
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime StartDate { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
更新
上面相应的模型类ViewModel已经具有以下内容DataAnnotation,可以在SQL Server表中正确创建数据类型为Date;并且当您在其中的相应表上运行查询时,SSMS它会正确显示StartDate列的数据(仅包含日期,例如9/30/2015等)。
模型
...
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
实际上,sql db中的StartDate Date仅是。此外,如果我对其执行查询,SSMS则仅正确返回日期。
asp.net-mvc ×9
c# ×6
viewmodel ×2
asp.net-core ×1
class ×1
collections ×1
domain-model ×1
indexing ×1
mvvm ×1