我对查看模型比较新,我遇到了一些使用它们的问题.这是一种情况,我想知道最佳做法是什么......
我将视图所需的所有信息都放入视图模型中.这是一个例子 - 请原谅任何错误,这是我的头顶编码.
public ActionResult Edit(int id)
{
var project = ProjectService.GetProject(id);
if (project == null)
// Something about not found, possibly a redirect to 404.
var model = new ProjectEdit();
model.MapFrom(project); // Extension method using AutoMapper.
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
如果屏幕只允许编辑一个或两个字段,当视图模型返回时,它会丢失相当多的数据(应该是这样).
[HttpPost]
public ActionResult Edit(int id, ProjectEdit model)
{
var project = ProjectService.GetProject(id);
if (project == null)
// Something about not found, possibly a redirect to 404.
try
{
if (!ModelState.IsValid)
return View(model) // Won't work, view model is …Run Code Online (Sandbox Code Playgroud) 你在视图中放了什么?
最近博客从斯科特Hanselman的有关使用一个特殊的模型绑定,方便测试使我想到了以下几点:你放什么在你的控制器逻辑构建视图模型,哪些应放在有何看法?他做的是这样的:
var viewModel = new DinnerFormViewModel {
Dinner = dinner,
Countries = new SelectList(PhoneValidator.Countries, dinner.Country)
};
return View(viewModel);
Run Code Online (Sandbox Code Playgroud)
现在,我使用相同的方式将数据传递给我的视图,但我不确定他如何处理Countries属性.您可以争辩双方:在SelectList中包装Country列表会为视图准备数据,就像创建一个viewmodel DTO来传递数据一样.另一方面,它有点像你专门操作下拉列表中使用的数据,限制了视图处理来自控制器的数据的方式.我觉得这对于视图和控制器之间的关注点分离是一个灰色区域,我无法真正决定走哪条路.对此有什么最佳做法吗?
PS:为了简单起见,让我们假设默认的ASP.NET MVC上下文,所以基本上你的开箱即用项目.默认视图引擎和所有爵士乐.
任何人都可以详细说明为什么你在动态菜单之类的每个动作上定义ViewData ["MenuData"]的原因?
我有一个简单的局部视图,它呈现一个菜单,我在一个母版页中渲染这个菜单.这对我来自ASP.NET WebForms是直观的,但是我填充菜单的唯一方法是传递ViewData ["MenuData"],但是我必须在每个控制器动作中执行此操作.它确实感觉有点愚蠢,我每次都必须定义这个视图数据.
在可测试性和ASP.NET MVC方面,我该如何处理?
我读过文章" 我们如何做MVC ".在规则#3中,表示"我们每个视图只有一个ViewModel类型".例如,当我们在mvc中搭建脚手架时,它会自动创建5个视图(创建,删除,详细信息,编辑和索引).通过该声明,是否意味着我们必须为该视图创建5个ViewModel?如果我的假设是错误的,那么使用ViewModels的最佳做法是什么?
有什么利弊:
背景:我有一些重型BLL课程,大约有100个字段.我将在一个视图中展示其中一些.相关模型应该如何看待.
我来自使用MVVM的WPF编程,所以这是我在ASP.NET中使用MVC的第一次体验
我试图做的是展示这个模型:
public class MultipleChoiceQuestion : Question
{
public string QuestionText
public List<MultipleChoiceAnswer> PossibleAnswers { get; set; }
}
public class MultipleChoiceAnswer
{
public string Text { get; set; }
public string UrlImage { get; set; }
public bool IsCorrect { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我有一个List<T>,这里是我试图在RadioButtons中显示的地方.我在这个网站上搜索一些数据,我发现主要使用了radioButtons中的ViewModels.
有没有人为ASP.NET MVC实现RadioButtonListFor <T>?
在这里使用ViewModels的目的是什么?如何在单选按钮中显示我的列表?这只是一点点混乱.