有时需要在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

【ASP.NET】@Model类型的使用详解的更多相关文章

  1. asp.net iis URLRewrite 实现方法详解

    原文 asp.net iis URLRewrite 实现方法详解 实现非常简单首先你要在你的项目里引用两个dll:actionlessform.dll.urlrewriter.dll,真正实现重写的是 ...

  2. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  3. ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解

    在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...

  4. VMWare虚拟机的网络类型配置选择详解

    VMWare虚拟机网络有三种类型,当然还有最后一种类型就是“不使用网络连接”,哈哈....... VMWare在安装会有让选择网络类型的选项,如果不确认使用那一种网络类型,也可以先随便选择一种网络类型 ...

  5. ASP.NET MVC Controller激活系统详解1

    一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...

  6. ASP.NET Form身份验证方式详解

    注:不会涉及ASP.NET的登录系列控件以及membership的相关话题, 我只想用比较原始的方式来说明在ASP.NET中是如何实现身份认证的过程.   ASP.NET身份认证基础 在开始今天的博客 ...

  7. ASP.NET MVC5基础-控制器(Controller)详解

    在上文ASP.NET MVC5基础 – MVC文件架构中我们简单了解了下控制器Controller的作用,本文我将详细介绍控制器Controller的使用方法. Controller的运行过程 上文我 ...

  8. 基于.Net Framework 4.0 Web API开发(2):ASP.NET Web APIs 参数传递方式详解

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.调用API过程中参数的传递是必须的,本节就来谈谈 ...

  9. 转载 asp.net中ViewState的用法详解

    转载原地址: http://www.jb51.net/article/73662.htm 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_V ...

随机推荐

  1. Sphinx + Coreseek 实现中文分词搜索

    Sphinx + Coreseek 实现中文分词搜索 Sphinx Coreseek 实现中文分词搜索 全文检索 1 全文检索 vs 数据库 2 中文检索 vs 汉化检索 3 自建全文搜索与使用Goo ...

  2. 鼠标上下滚动支持combobox选中

    首先需要jquery插件来支持: 1.代码SVN检出https://github.com/jquery/jquery-mousewheel 2.点击这里下载jquery.mousewheel.zip ...

  3. OpenGL ES 3.0顶点着色器(一)

    OpenGL ES 3.0流程图 1.Vertex Shader(顶点着色器) 顶点着色实现了一种通用的可编程方法操作顶点. 顶点着色器的输入包括以下几个: • Shader program.程序的顶 ...

  4. Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage

    typeAliasesPackage 默认只能扫描某一个路径下,或以逗号等分割的 几个路径下的内容,不支持通配符和正则,采用重写的方式解决 package com.xxxx.xxx.util.comm ...

  5. CSS 之 样式优先级机制

    多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 1.一般情况下,优先级从低到高,如下: 浏览器缺省(即浏览器默认) →(外部样 ...

  6. 数据库同步相关的SQL语句

    一.目标: 本文重点给大家介绍几款SQL用法,一般常用于数据库同步之类的. 二.例子: 1.找出A表中不存在于B表的记录. from B where A.[序号]=B.[序号]); 2.将A表中不存在 ...

  7. EventSource 对象用于接收服务器发送事件通知,是网页自动获取来自服务器的更新

    //--------------------------------客户端代码----------------------------- if(typeof(EventSource) !== &quo ...

  8. tomcat6url请求400错误(%2F与%5C)

    近期几天,开发接口时.tomcat报了400错误,查了下原因. 错误原因:url中參数部分包括/,默认tomcat是不支持url參数包括: /(%2F),\(%5C). 解析方法:能够通过加入配置Do ...

  9. 20160210.CCPP体系具体解释(0020天)

    程序片段(01):01.二级指针.c 内容概要:二级指针 #include <stdio.h> #include <stdlib.h> //01.二级指针: // 1.使用场景 ...

  10. Axure JS弹窗提示部件

    百度网盘:http://pan.baidu.com/s/1c1ZjUPq