zoukankan      html  css  js  c++  java
  • 一个ActionResult中定位到两个视图—<团委项目>

         在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,“约定大于配置”,但是我们有的时候需要在一个ActionResult中根据业务跳转到不同的视图,展示到界面上。

    这里也不一定绝对要跳转到对于的视图,我们可以通过Return RedirectToAction()来跳转到对于的视图,如下

           public ActionResult Detail(Guid id)
            {
                try
                {
                    var entity = _articleService.GetById(id);
                    if (entity!=null)
                    {                    
                     var model = Mapper.Map<ArticleDetail>(entity);
                        return View(model);
                    }
                    return RedirectToAction("Index");
                }
                catch (Exception ex)
                {                
                    throw new Exception(ex.Message);
                }            
            }

    这个是我们判断为空的时候跳转到首页的列表页面。我们也可以在(“Index”,”Controller”)添加对应的控制器,这样就可以在项目中随便的进行跳转。

    下面我们看下如何跳转到两个视图中。

    需求:这里的项目分为两类,本可以将项目的详情写成一个,但是由于项目的内容不一样,我们需要通过两个视图来展示,本来可以新建两个action来解决,但是由于很多的代码是一样的,再三思考下,在一个action中根据不同的类型跳转到了不同的视图进行展示。

    代码:

            /// <summary>
            /// 项目详情
            /// </summary>
            /// <returns></returns>
            public ActionResult ProjectDetails(Guid id)
            {            
                    try
                    {
                        var project = _projectService.GetById(id);
                        if (project.ProjectType ==ProjectType.大学生三创项目)
                        {
                            var model = new InnovateProjectDetialView();
                            var entity = _innovateAndOriginalityProjectService.GetById(id);
                            model=Mapper.Map(entity, model);
                            return View("InnovateProjectDetails", model);
                        } 
                        else
                        {
                            var model = new AfterSchoolProjectDetialView();
                            var entity = _afterSchoolProjectService.GetById(id);
                            model=Mapper.Map(entity, model);
                            return View("AfterSchoolProjectDetails", model);   
                        }                  
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
            }
    解释:通过在前面Index列表中点击项目的详情,我们可以得到不同的ID,根据ID取到项目,接着通过项目的分类我们将其分开,这样就可以各自返回到自己的视图,这里我们需要添加模型过去,应为我们两个页面里面的模型是不一样的。
      return View("InnovateProjectDetails", model);

    这里没有将模型写在actionresult的参数里面,是因为我们两个类型的模型是不一样的需要各自进行实例化,接着进行PO—>VO的转换(这里是使用的autoMapper来进行的,为了实现高内聚低耦合,<还在研究中>)

    下面是各自需要引用的代码,因为我们从视图中返回的就是这个模型。

    @model Ylxy.Twdc.Models.InnovateProjectDetialView
    @model Ylxy.Twdc.Models.AfterSchoolProjectDetialView

    这样就可以实现效果了。

    截图如下。

    image

    imageimage

    大致的效果就是这个样子。

    我要制定详细的计划,学习了。

  • 相关阅读:
    有几个控件的操作时有关联关系,一个对话框中有多组这样的控件群,各个组中的控件的消息响应处理非常类似,以下提供解决方案
    Visual Studio DSL 入门 1 什么是特定领域开发和DSL
    ★软件架构DSL领域特定语言初探[
    人生如棋胜似棋
    成功女性处世十大秘诀
    职场丽人应具备十二种经典姿态
    程序员真实写真:35岁前成功的12条黄金法则 (转)
    思雨如思君(七言)
    站在2006的边缘
    不得不学的创业“八忌”
  • 原文地址:https://www.cnblogs.com/netxiaohui/p/5304329.html
Copyright © 2011-2022 走看看