Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 初学者mvc在哪里调用方法_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 初学者mvc在哪里调用方法

C# 初学者mvc在哪里调用方法,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在用Web表单做一个大项目,输入了一大堆代码(只需很少的重构就可以解决),所以我决定看看mvc,似乎每个人都喜欢它而不是Web表单 我有一个dll文件,其中包含现有SQL db的所有LINQ to SQL类和方法,我开始自学如何在mvc中重新创建这个项目。我首先从webforms到razor重新创建了我的主页,到目前为止还不错,我还重新创建了一个用户控件,使其部分查看并循环。 部分视图是由一个L2S类强类型化的,问题是其中有一些原始数据。例如,我的部分视图模型是我的L2S类PostDetai

我正在用Web表单做一个大项目,输入了一大堆代码(只需很少的重构就可以解决),所以我决定看看mvc,似乎每个人都喜欢它而不是Web表单

我有一个dll文件,其中包含现有SQL db的所有LINQ to SQL类和方法,我开始自学如何在mvc中重新创建这个项目。我首先从webforms到razor重新创建了我的主页,到目前为止还不错,我还重新创建了一个用户控件,使其部分查看并循环。
部分视图是由一个L2S类强类型化的,问题是其中有一些原始数据。例如,我的部分视图模型是我的L2S类PostDetails:它包含一些从输出中准备好的数据,如:Title、Permalink、ViewsNumber等。但它也包含一些原始数据,如UserId(我需要从dll调用方法以获取用户名),DateTimeCreated(我还需要在其上调用方法以获取时差),在webforms中,我会在codebehind中执行此操作,但我不确定在mvc中的何处执行此操作,可能是在controller中,并在ViewData中传递。我还要求将来执行此操作,而不仅仅是在这种情况下。

您应该在controller中执行这些操作。控制器就是它听起来的样子,它控制模型和视图之间的数据流

以下是使用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上有大量的信息,但在MVC中,所有请求都将由控制器中的操作方法处理。然后控制器返回一个视图。因此,您可以在控制器(或将从控制器调用的其他层)中获取数据,并将该数据传递给视图

强类型视图是一种干净的方式。为您的场景创建ViewModel。大多数视图模型看起来与实体相似。例如:为了显示客户的详细信息,我将创建一个名为“CustomServiceWModel”的viewModel

然后在我的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的文件夹

public class CustomerViewModel
{
  public string CustomerId { set;get;}
  public string FirstName  { set;get;}
}
@model CustomerViewModel

<div>
   <h2>@Model.FirstName</h2>
   <p>@Model.CustomerId</h2>
</div>
@model客户服务模型
@Model.FirstName
@Model.CustomerId
可以像
http://yourdomain.com/Customer/Details/25


就个人而言,我更喜欢保持我的控制器动作精简。因此,我在一个单独的服务层中编写GetFromDatabase代码,我只是从我的操作方法调用该方法,我认为您会发现本文非常有用:

它详细解释了每个组件的用途:

型号。模型对象是应用程序中实现 应用程序数据域的逻辑。通常,为对象建模 在数据库中检索和存储模型状态。例如,一个产品 对象可能从数据库检索信息,对其进行操作,然后 然后将更新的信息写回SQLServer中的Products表

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

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