zoukankan      html  css  js  c++  java
  • MVC 构造新Model实现内容搜索

    当前在使用MVC开发一个网站,习惯了使用ASP.NET中控件,转到MVC之后突然对于页面和后台代码的传值感觉无从下手。花了点时间在网上看了写帖子后,想到了一个方法,重新构造一个新Model, 然后利用Model在页面和代码之间传值。

    举例来说:

    我数据库中有张学生表(Student),表中字段分别为:ID, StudentNo, StudentName, Gender, Birth, Domicile, Phone, Mail。相应的我的代码中有个名为Student的Model, 我想实现根据学生的学号,姓名,性别等条件从数据库中查询出符合条件的结果集。并将结果集在View中显示。

    1。在View中提供输入框,使用户能够输入查询条件

    2。在View中提供提交按钮,用户输入查询条件以后,点击提交按钮获得查询结果

    3。难题出现了,如何将用户输入的查询条件传到Controler 代码中,并将查询到的结果返回到View中?

    方法:

    创建一个新Model,新Model比如取名叫Search,它包含两个部分,第一部分是查询条件(StuNo, StuName, Gender, ...),第二部分是查询结果(List<Student> StuResults).

    创建基于Search类型的View,把Search传到View中,当点击提交按钮时,将 Search Model传到Controller,在Controller中得到Search类的查询条件,根据条件查询符合条件的Student的结果,将结果赋值给Search类的StuResults。然后将Search重新传回View。

    代码:

    新建Model

    namespace CertTitle.Models
    {
        public class Search
        {
            #region Search by Condition
            public string EntryID { get; set; }
            public string Title { get; set; }
            public string CDM { get; set; }
            public string Owner { get; set; }
            #endregion end of search condition
    
            #region Search Results
            public List<ExamEntry> ResultList { get; set; }
            #endregion end of search result
        }
    }


    Controller

            public ActionResult Lookup()
            {
                Search result = new Search();
                result.EntryID = "";
                result.Title = "";
                result.CDM = "";
                result.Owner = "";
                result.ResultList = new List<ExamEntry>();
                return View(result);
            }
    
            [HttpPost]
            public ActionResult Lookup(Search search)
            {
                string exam = search.EntryID;
                string keywordsInTitle = search.Title;
                string CDM = search.CDM;
                string AssignedTo = search.Owner;
                var results = db.ExamEntries.Where(e => (e.ExamID == exam||e.Title.Contains (keywordsInTitle)||
                    e.CDM ==CDM ||e.AssignedTo == AssignedTo)).ToList();
                if (results != null)
                    search.ResultList = results;
                return View(search);
            }


    View

    @using CertTitle.Models
    @model CertTitle.Models.Search
    
    @{
        ViewBag.Title = "Lookup";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Find Titles</h2>
    
    <div>
        @using (Html.BeginForm())
        {
            <fieldset>
                <legend>Type Exam# which you want to find</legend>
                <div>
                    Exam# @Html.TextBoxFor(model => model.EntryID) | Title @Html.TextBoxFor(model =>model.Title) | 
                    CDM @Html.TextBoxFor(model => model.CDM) | Assigned To @Html.TextBoxFor(model => model.Owner) |<input type="submit" value="Search" />
                </div>
                <div>
                    
                </div>
            </fieldset>
        }
    </div>
    
    <table id="tbInfo">
        <thead>
            <tr>
                <th>EXAM#</th>
                <th>VER</th>
                <th>LAN</th>
                <th>PjM</th>
                <th>CDM</th>           
                <th>Status</th>
                <th>REQUIRE</th>
                <th>ACTUAL</th>
                <th>ISSUE1</th>
                <th>ISSUE2</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.ResultList)
        {
                <tr>
                    <td>@Html.ActionLink(@item.ExamID,"Detail",new {id = @item.ID})</td>
                    <td>@item.Version</td>
                    <td>@item.Language</td>
                    <td>@item.PjM</td>
                    <td>@item.CDM</td>               
                    <td>@CertTitleHelper.TaskStatusConverter(@item.Status)</td>
                    <td>@item.PlanFinishDate</td>
                    <td>@item.ActualFinishDate</td>
                    <td>
                        @Html.ActionLink(@item.IssueCount.ToString(),"ViewIssueByTitle","CertIssue",new {id = @item.ID},null)
                    </td>
                    <td>
                        @Html.ActionLink(@item.IssueCountToEDP.ToString(),"ViewIssueByTitle","CertIssue",new {id = @item.ID},null)
                    </td>
                    <td style=" 150px">
                        @Html.ActionLink("Edit","Edit",new{id = @item.ID}) |
                    @Html.ActionLink("Missed Issue", "MissIssue", "CertIssue", new { id = @item.ID}, null)
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td colspan="4">@item.Title</td>
                     <td>@item.AssignedTo</td>
                </tr>
        }
        </tbody>
    </table>

    View中使用到了一个

    CertTitleHelper.TaskStatusConverter(int? )的方法,此方法根据一个Int型的值转换成相应的字符串值,例如枚举的转换。

     枚举在数据库中显示为Int,在页面中需要显示其字符串。转换代码如下

    namespace CertTitle.Models
    {
        public class CertTitleHelper
        {
            public static string TaskStatusConverter(int? status)
            {
                switch (status)
                {
                    case (int)TaskStatus.NotAssigned:
                        return TaskStatus.NotAssigned.ToString();
                    case (int)TaskStatus.Issues:
                        return TaskStatus.Issues.ToString();
                    case (int)TaskStatus.InProgress:
                        return TaskStatus.InProgress.ToString();
                    case (int)TaskStatus.Complete:
                        return TaskStatus.Complete.ToString();
                    default:
                        return TaskStatus.NotAssigned.ToString();
                }
            }
        }
    }
  • 相关阅读:
    Sqlserver @@IDENTITY 和 SCOPE_IDENTITY() 的使用
    Sqlserver 其它操作
    将 .net core 通过容器docker 部署到 linux 记录
    Unity中使用ProtocolBuffer
    Android笔记基于https://www.bilibili.com/video/BV1Bf4y1D7Gq?p=1
    简单登陆界面的应用
    springboot 梳理7--整合redis(待完善)
    4.工厂方式建立
    5,db的解决方法,日志集成
    10.3右上角后台逻辑处理,前台处理
  • 原文地址:https://www.cnblogs.com/qixue/p/3683253.html
Copyright © 2011-2022 走看看