我正在使用Web Forms进行大项目并输入大量代码(可以通过少量重构解决),所以我决定看一看mvc,看起来每个人都喜欢它在网络表单上。
我有所有LINQ to SQL类和现有sql db的方法的dll文件,我开始通过在mvc中重新创建这个项目来教我自己。我首先从webforms重新创建我的主页到razor,到目前为止很好,我重新创建了一个用户控制局部视图并循环它。 部分视图是使用L2S类之一强类型的,其中有一些原始数据。例如,我的部分视图模型是我的L2S类PostDetails:它包含一些数据准备从输出如:Title,Permalink, ViewsNumber等,但它也包含一些原始数据,如UserId(我需要从dll调用方法来获取用户名),DateTimeCreated(我还需要调用方法来获取时间差),在webforms中我会在代码隐藏中执行此操作但是我不知道在mvc中可以用它做什么,可能在控制器中并在ViewData中传递它。我也问这个未来,而不仅仅是这种情况。
答案 0 :(得分:1)
您应该在控制器中执行这些操作。控制器正是它听起来的样子,它控制模型和视图之间的数据流。
以下是使用PostDetails的示例:
<强> PostDetailsModel 强>
String Title {get;set;}
String Permalink {get;set;}
Int ViewNumber {get;set}
Int UserId {get;set}
DateTime DateTimeCreated {get;set;}
GetDetailsView :这将由您的用户请求,并且将是PostDetailsModel的可视化表示(但您希望对其进行格式化)。请求此视图时,会呼叫您的控制器....
<强> PostDetailsController 强>
//This method will (by default) come from calling [BASEURL]/PostDetails/GetDetails
public ActionResult GetDetails()
{
var details = new PostDetailsModel();
details.UserId = GetUserId();
details.ViewNumber = GetViewNumber();
....
//By default this looks for a view in the PostDetails folder
//by the name of your method (GetDetails)
return View(details);
}
注意控制器如何是模型和视图之间的路由器,基本上。但是,需要注意的是,从某种业务层中包含的方法填充模型会更好(但是实现它)。像var details = BL.GetDetails();
此外,当用户发出保存数据的请求时,您可以使用另一种获取数据的方法(无论是PostDetailsModel还是int或......)并执行任何需要执行的操作,然后执行此操作可以重定向回显示操作(或任何你需要它去的地方)
通过简单的谷歌搜索,有关MVC的大量信息。 Here is Microsoft's overview,但wikipedia article is very succinct if you just want the basics
答案 1 :(得分:1)
在MVC中,所有请求都将由控制器中的操作方法处理。然后控制器返回一个视图。因此,您可以获取控制器中的数据(或将从控制器调用的不同层)并将该数据传递给您的视图。
强类型视图是一种干净的做事方式。为您的方案创建ViewModel。大多数ViewModel看起来与实体类似。例如:为了显示有关客户的详细信息,我将创建一个名为“CustomerViewModel”的viewModel
public class CustomerViewModel
{
public string CustomerId { set;get;}
public string FirstName { set;get;}
}
然后在我的CustomerController中,我将为客户提供一个get方法
public class CustomersController : Controller
{
public ActionResult Details(int id)
{
CustomerViewModel objCustomer=new CustomerViewModel;
objCustomer.FirstName="Samuel";
//Instead of hardcoding the values here , you can get it
// from the database using the id and assign to the properties
return View(objCustomer);
}
}
您的Views \ Customer中将有一个名为“Details.chtml”的视图 对CustomerViewModel强类型的文件夹
@model CustomerViewModel
<div>
<h2>@Model.FirstName</h2>
<p>@Model.CustomerId</h2>
</div>
可以像http://yourdomain.com/Customer/Details/25
我个人更喜欢让我的控制器动作变瘦。所以我在一个单独的服务层写了GetFromDatabase代码,我只是从我的动作方法中调用该方法
答案 2 :(得分:0)
我认为你会发现这篇文章非常有用:
详细解释了每个组件应该用于什么:
<强>模型即可。模型对象是实现的应用程序的一部分 应用程序数据域的逻辑。通常,模型对象 检索并存储数据库中的模型状态。例如,产品 object可以从数据库中检索信息,对其进行操作,以及 然后将更新的信息写回SQL Server中的Products表。
<强>视图即可。视图是显示应用程序用户的组件 界面(UI)。通常,此UI是根据模型数据创建的。一个 示例是显示文本的Products表的编辑视图 框,下拉列表和基于当前状态的复选框 产品对象。
<强>控制器即可。控制器是处理用户的组件 交互,使用模型,最终选择一个视图 渲染显示UI。在MVC应用程序中,仅显示视图 信息;控制器处理和响应用户输入和 相互作用。例如,控制器处理查询字符串值, 并将这些值传递给模型,模型又查询 数据库使用值。