【ASP.NET】@Model类型的使用详解

有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求。

假设Person和Product是两个类型,如下是控制器代码。

  1. using System;
  2. using System.Web.Mvc;
  3. namespace Razor.Controllers
  4. {
  5. public class HomeController : Controller
  6. {
  7. Razor.Models.Product myProduct = new Models.Product { ProductID = 1, Name = "Book"};
  8. Razor.Models.Person myPerson = new Models.Person { PersonID = "1", Name = "Jack" };
  9. public ActionResult Index()
  10. {
  11. return View(Tuple.Create(myProduct,myPerson));  // 返回一个Tuple对象,Item1代表Product、Item2代表Person
  12. }
  13. }
  14. }

如下是视图Index.cshtml的代码

  1. @model Tuple<Razor.Models.Product, Razor.Models.Person>
  2. @{
  3. Layout = null;
  4. }
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta name="viewport" content="width=device-width" />
  9. <title>Index</title>
  10. </head>
  11. <body>
  12. <div>
  13. @Model.Item1.Name
  14. </div>
  15. </body>
  16. </html>

当然,还有许多其它的方法做到上述相同效果。但上述方法直接简明,容易理解和使用。

有时候我们在页面中会看见@model的语句,都是用于从后台向前端页面传递数据的,下面我们来看看一个案例:

(1)定义Model实体

  1. public class SearchWithFundingList
  2. {
  3. /// <summary>
  4. /// 方案分类
  5. /// </summary>
  6. public int ProjectCategory { get; set; }
  7. /// <summary>
  8. /// 发起时间小
  9. /// </summary>
  10. public string MinAddDate { get; set; }
  11. /// <summary>
  12. /// 发起时间大
  13. /// </summary>
  14. public string MaxAddDate { get; set; }
  15. /// <summary>
  16. /// 状态
  17. /// </summary>
  18. public int State { get; set; }
  19. /// <summary>
  20. /// 昵称
  21. /// </summary>
  22. public string NickName { get; set; }
  23. /// <summary>
  24. /// 用户id
  25. /// </summary>
  26. public int Mid { get; set; }
  27. }

(2)传递Model

  1. private SearchWithFundingList GetFormWithFundingNow(int id, int uid)
  2. {
  3. SearchWithFundingList model = new SearchWithFundingList();
  4. model.Mid = uid;
  5. model.State = WithFundingStateKey.Doing;
  6. model.ProjectCategory = id;
  7. return model;
  8. }

注意:一定要在最后return 实体,不然前台的Model实体是null

(3)具体调用

在页面代码最上面添加上实体的声明

  1. @{Layout = null;}
  2. @model StockFunds.Entities.DTO.SearchWithFundingList

接下来就可以在页面里使用Model(这里的实体就是指SearchWithFundingList实体),并且此时的Model已经是强类型了,我们可以点出具体的属性,非常方便

    1. <span class="state">Model.State</span>元</span>

接下来是一个模拟用户登录的表单:

HomeController.cs

namespace Test.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; return View("~/Views/Home/Login.cshtml");
}
public String Login(User user) {
String name = user.Name;
String password = user.Password;
if ("张飞".Equals(name) && "abc".Equals(password))
{
return "登录成功";
}
else {
return "登录失败";
}
}
}
}

HomeController.cs

Login.cshtml

@{
Layout = null;
}
@model Test.Models.User
<html>
<head>
<title>用户登录</title>
</head>
<body> <div>
<form action="Home/Login" method="post">
用户名:@Html.TextBoxFor(model=>model.Name)<br/>
密码:@Html.TextBoxFor(model=>model.Password)<br />
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>

Login.cshtml

上一篇:HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)


下一篇:Process Explorer使用图文教程