asp.net mvc controller view通过model实现数据的传递,一个页面(view),多个model

一、首先是单个model数据的传递

1、首先创建一个在Models里面创建一个ProductModels,

代码如下:

using System;
using System.Collections.Generic;
using System.Web;
using mvc.Models;

namespace mvc.Models
{
    #region 模型
    public class ProductModel
    {
        public string p_id { get; set; }
        public string p_name { get; set; }
        public string p_details { get; set; }
    }

    #endregion
}

2、然后在ProductController中把数据返回到View

namespace mvc.Controllers
{
    public class ProductController : Controller
    {
        //
        // GET: /Product/
        public ActionResult Index()
        {
            ProductModel p = new ProductModel();
            p.p_id = "id1";
            p.p_name = "name1";                    

            return View(p);
        }
     }
}

3、创建,view页面,并指定model,创建强类型视图,如果“视图数据类型”中找不到刚才创建的“ProductModel”,需要先编译一下项目:选中项目名称,点击右键,选择“生成”,然后就可以在找到了。

 

Product/Index.apsx页面代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/HasNav.Master" Inherits="System.Web.Mvc.ViewPage<mvc.Models.ProductModel>" %>

<asp:Content ID="p_title" ContentPlaceHolderID="TitleContent" runat="server">
	产品展示
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="MainLeft" runat="server">
    <%=model.c_id %>
</asp:Content>

因为viewpage的model为ProductModel,所以在下面使用Model时,Model即为ProductModel,所以可以直接调用ProductModel的get方法,获取属性。

 

二、如果要像view传递list,则在controller中创建一个List,代码如下:

// GET: /Product/
public ActionResult Index()
{
    List<ProductModel> pList = new List<ProductModel>();
    ProductModel p = new ProductModel();
    p.p_id = "id";

    pList.Add(p);

    return View(pList);
}

view代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/HasNav.Master" Inherits="System.Web.Mvc.ViewPage<List<mvc.Models.ProductModel>>" %>

<asp:Content ID="p_title" ContentPlaceHolderID="TitleContent" runat="server">
	产品展示
</asp:Content>

<asp:Content ID="p_main" ContentPlaceHolderID="MainRight" runat="server">
    
        <div class="p_list">
        
        </div>

        <%
            
            
            foreach (var product in Model)
            { 
                %>
                    <h3><%= Html.ActionLink(product.p_name, "Details", new { id = product.p_id }, new { target = "_blank" })%></h3>
                <%
            }
            
            
        %>


</asp:Content>

因为此时View的类型为List<mvc.Models.ProductModel>,所以,在下面使用Model时,Model为一个product的list集合,遍历输出即可

 

三、如果想要在一个View中使用多个Model,那我们需要在定义一个Model,代码如下:

public class ProductViewModel {
        public List<CategoryModel> cList { get; set; }
        public List<ProductModel> pList { get; set; }
    }

然后view层代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/HasNav.Master" Inherits="System.Web.Mvc.ViewPage<mvc.Models.ProductViewModel>" %>

<asp:Content ID="p_header" runat="server" ContentPlaceHolderID="cphHead">
    <link href="../../Content/Product.css" rel="stylesheet" type="text/css" />
</asp:Content>

<asp:Content ID="p_title" ContentPlaceHolderID="TitleContent" runat="server">
	产品展示
</asp:Content>

<asp:Content ID="Content1" ContentPlaceHolderID="MainLeft" runat="server">
    <%
        foreach (var category in Model.cList)
        { 
            %>
                <h3><%= Html.ActionLink(category.c_name, "Details", new { id = category.c_id }, new { target = "_blank" })%></h3>
            <%
        }
    %>
</asp:Content>

<asp:Content ID="p_main" ContentPlaceHolderID="MainRight" runat="server">
    
        <div class="p_list">
        
        </div>

        <%
            
            
            foreach (var product in Model.pList)
            { 
                %>
                    <h3><%= Html.ActionLink(product.p_name, "Details", new { id = product.p_id }, new { target = "_blank" })%></h3>
                <%
            }
            
            
        %>


</asp:Content>

view使用mvc.Models.ProductViewModel,所以调用ProductViewModel的get方法得到对应的List,然后遍历输出即可

发表评论