从模型中读取数据并在剃刀视图上显示 - mvc

时间:2014-08-27 19:28:19

标签: asp.net-mvc razor

我试图通过模型从数据库中获取数据并将其显示在视图上。这是示例代码,我能够提取数据但是没有显示在视图上。我很感激任何帮助。提前致谢

Model Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

namespace Test.Models
{
    public class CustModel
    {
        SqlConnection con = new SqlConnection();        
        List<CustModel> CustList = new List<CustModel>();       
        public String CustName { get; set; }        
        public String CustPhone { get; set; }         
        CustModel p = null;        
        public List< CustModel > GetCustInfo()        
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CustConnectionString"].ToString());
            con.Open();
            using (con)            
            {
            SqlCommand cmd = new SqlCommand("select * FROM Cust_tb where ZIP = 37771", con);               
            SqlDataReader rd = cmd.ExecuteReader();               
            while (rd.Read())               
            {                   
                    p = new CustModel ();
                    p.CustName =Convert.ToString(rd.GetSqlValue(0));
                    p.CustPhone = Convert.ToString(rd.GetSqlValue(10));                    
                    CustList.Add(p);               
            }            
            }            
            return CustList;
    }
}
}

Controller Code

public ActionResult CustDisplay()
        {
            CustModel p = new CustModel();
            List<CustModel> Li = new List<CustModel>();
            Li = p. GetCustInfo (); 
            ViewData["CustInfo"] = Li; 
            return View("CustDisplay");
        }

View Code

@model Test.Models.CustModel

@{
    ViewBag.Title = "CustDisplay";
}

<!DOCTYPE html>
<head>
<title> Customer Information </title>
</head>
<body>
<div class="display-label">
Name
</div>
<div class="display-field">
@Html.DisplayFor(Model => Model.CustName)
</div>
<div class="display-label">
Phone
</div>
<div class="display-field">
@Html.DisplayFor(Model => Model. CustPhone)
</div>
</body>


</html>

1 个答案:

答案 0 :(得分:2)

也许我过度简化了这一点 - 但我认为这只是因为你实际上没有在视图中发送或使用你的列表...我没有像你那样得到我的数据 - 所以我会假设您获得了所需的数据,并且返回的列表包含p(名称和电话)中的1到多行数据

即使你在ViewData中传递了你的列表 - 你也没有在视图中分配它...最好的方法是在你的控制器中调用return View(Li);而不是return View("CustDisplay");你是已经在您要调用的视图中 - 因此它会将列表发送到@model。 (可能有一种方法将ViewData分配给视图中的模型) - 但我将列表传入,因此数据被绑定...

您应该制作模型@model IEnumerable<Test.Models.CustModel>

然后

<table class="table">
                <tr>
                    <th>
                        @Html.DisplayNameFor(model => model.CustName)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.CustPhone)
                    </th>                        
                </tr>

                @foreach (var item in Model){
                <tr>   
                    <td>
                        @Html.DisplayFor(modelItem => item.CustName)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.CustPhone)
                    </td>                    
               </tr>
            }
       </table>