初学者mvc在哪里调用方法

时间:2012-03-26 15:51:11

标签: c# asp.net-mvc-4

我正在使用Web Forms进行大项目并输入大量代码(可以通过少量重构解决),所以我决定看一看mvc,看起来每个人都喜欢它在网络表单上。

我有所有LINQ to SQL类和现有sql db的方法的dll文件,我开始通过在mvc中重新创建这个项目来教我自己。我首先从webforms重新创建我的主页到razor,到目前为止很好,我重新创建了一个用户控制局部视图并循环它。 部分视图是使用L2S类之一强类型的,其中有一些原始数据。例如,我的部分视图模型是我的L2S类PostDetails:它包含一些数据准备从输出如:Title,Permalink, ViewsNumber等,但它也包含一些原始数据,如UserId(我需要从dll调用方法来获取用户名),DateTimeCreated(我还需要调用方法来获取时间差),在webforms中我会在代码隐藏中执行此操作但是我不知道在mvc中可以用它做什么,可能在控制器中并在ViewData中传递它。我也问这个未来,而不仅仅是这种情况。

3 个答案:

答案 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)

我认为你会发现这篇文章非常有用:

MVC Overview

详细解释了每个组件应该用于什么:

  

<强>模型即可。模型对象是实现的应用程序的一部分   应用程序数据域的逻辑。通常,模型对象   检索并存储数据库中的模型状态。例如,产品   object可以从数据库中检索信息,对其进行操作,以及   然后将更新的信息写回SQL Server中的Products表。

     

<强>视图即可。视图是显示应用程序用户的组件   界面(UI)。通常,此UI是根据模型数据创建的。一个   示例是显示文本的Products表的编辑视图   框,下拉列表和基于当前状态的复选框   产品对象。

     

<强>控制器即可。控制器是处理用户的组件   交互,使用模型,最终选择一个视图   渲染显示UI。在MVC应用程序中,仅显示视图   信息;控制器处理和响应用户输入和   相互作用。例如,控制器处理查询字符串值,   并将这些值传递给模型,模型又查询   数据库使用值。