二. ASP NET MVC

本文介绍ASP.NET MVC框架中视图的组织方式、控制器如何通过视图模板返回HTML响应,以及如何从控制器向视图传递数据,包括使用ViewData字典和ViewModel模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Controller类引用的View会自动的对应到Views/XXX目录中寻找。

其中Views/Shared存放共享的试图模板。

搜索顺序:

首先搜索/Views/[Controller],如果找不到,再开始查找Views/Shared子目录。

 

2.

建议:视图的模板名称和Action引用的方法名称相同。

这样的话,开发人员就可以省略View Template的名称。

比如:return View("Details", dinner) 可以简化为View(dinner)。

 

public ActionResult Details(int id)
        {
            //Response.Write("<h1>Details DinnerID: " + id + "</h1>");
            Dinner dinner = dinnerRepository.GetDinner(id);
           
            return dinner != null? View(dinner) : View("NotFound");
        }

3. 实现HTTP-GET的Action方法

 用HTML.BeginForm()和HTML.EndForm()来生成HTML form元素.

<form action="/Dinners/edit/1" method="post"></form>

 

4.实现HTTP-POST的Action 方法.

添加[AcceptVerbs(HttpVerbs.Post)].

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {
...
}

 

获取表单参数,并且自动更新的简单方法:UpdateModel(Dinner)

5.异常处理可以通过ModelState来实现.

try {
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
catch {
foreach (var issue in dinner.GetRuleViolations()) {
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(dinner);
}

 

 

6. Controller传递数据到View视图模板

MVC

 

模式一个典型的特征是严格的功能隔离。Model 模型、Controller 控制器和View 视图各自定义了作

用和职责,且相互之间以定义好的方式进行沟通。这有助于提升测试性和代码重用。

 

Controller 决定呈现HTML 响应给客户端是,它负责显式传递给View 模板所有需要的数据。View 模板

从不执行任何数据查询或应用程序逻辑 – 仅仅负责呈现

 

Model Controller 传递过来的数据。

1)

Controller:

使用ViewData字典 [ Authorize ] public   

ActionResult Edit(int id) {

Dinner dinner = dinnerRepository.GetDinner(id);

ViewData[

"Countries"] = new SelectList(PhoneValidator.AllCountries, dinner.Country);

return 

View(dinner);

 

然后在View里面:

Edit.aspx 视图模板,使用Html.DropDownList() 辅助方法代码Html.TextBox()

辅助方法:

<%

= Html.DropDownList("Country", ViewData["Countries"] as SelectList ) %>

 同时在HTTP POST Edit 方法中Catch更新ViewData[""];

 2)使用ViewModel模式:

需要针对特定的

 

View 创建强类型的类,

公开

 

View 模板需要的动态参数值或内容。Controller 类接着填充和传递这些类给View 模板去使用。这

样可以实现类型安全、编译期间检查和编辑器智能提示等等。

1)创建ViewModel类,

 public class DinnerFormViewModel

{

// Properties

 

public 

// Constructor

public 

Dinner = dinner;

Countries = 

DinnerFormViewModel(Dinner dinner) {  new SelectList(PhoneValidator.AllCountries, dinner.Country);
public Dinner Dinner { get ; private set ; } SelectList Countries { get ; private set ; }

}

2)更新Action方法

 [Authorize]public ActionResult Edit(int id) {

Dinner 

return 

View( new DinnerFormViewModel(dinner)); dinner = dinnerRepository.GetDinner(id);

3)更新模板以及HTML页面

更新Inherits属性:

Inherits="System.Web.Mvc.ViewPage

 

<xxx.Controllers.yyyyViewModel>

<%=Html.TextBox("Longitude",Model.Dinner.Longitude) %>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值