一个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

这样就可以实现效果了。

截图如下。

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

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

时间: 2024-12-11 11:01:05

一个ActionResult中定位到两个视图—<团委项目>的相关文章

一个界面中如何使用两个tableView

首先,创建两个全局的tableview; @interface TianPinXunLiViewController () { UITableView *leftTableView; UITableView *rightTableView; } @end 其次,实现代理的时候,用对象比对的方法  A isequal B #pragma - mark TableView Datasouce -(NSInteger)tableView:(UITableView *)tableView numberO

判断一个数字中是否包含两个相同的子串并输出

功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串) 1 package ren.laughing.test.problem; 2 3 import java.util.Scanner; 4 5 /** 6 * 功能:判断一个数字中是否包含两个相同的子串(字串长度至少大于等于2),并输出(仅输出第一次相同的子串) 7 * 8 * @author Laughing_Lz 9 * @time 2016年7月4日 10 */ 11 public cla

【Android】一个activity中垂直排列两个listview

为了实现这种效果,一开始我想到的办法是ilistVew中加上一个footerview,footerview里面嵌套一个listview,但是实际操作之后发现footerview里的listview只显示一项,这个问题困扰了半天,一直没有找到合适的解决办法,直到昨天晚上偶然看到一篇博文介绍说,scrollview里嵌套listview也出现了同样的问题,解决办法是动态设置listview的高度,于是我用这种方法也试了试,结果还真解决了. MainActivity.java package com.

找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符

思路一:先找出一个字符串中所有子串,再找出所有子串中最长的那一个:思路二:每次找出的子串长度都比上一次的子串长,则最后的子串即是最长子串的长度数.我选择的是第二种方法. public class FindSubstringMaxlengthNoduplicate { public static void main(String[] args) { String s = "adcdghcwioizhfksjdyuiodfhjskhgkhgeisdcjdkh"; ArrayList<

两个List去掉重复元素放在一个List中去【两个Listsize值非常大】

/* * 思路: * 1.取得两个list的相同元素:list.retainAll(E)方法 * 2.两个list分别去掉相同的元素:list.removeAll(E); * 3.将剩下的两个List分别加入到一个新的List去:addAll */ public class Test1 { public static void main(String[] args) { List list1 = new ArrayList(); Random random = new Random(); //l

数据库中一个表中如何设置两个主键

其实做法很简单. 在规定中数据库的唯一性中, 一张表中最多一个主键. 如果想设置两个主键,那么只有在联合的表中或者是讲两个字段联合起来, 例如 表student(sno, sname, age) 表course(cno, sname, grade) 主键具有唯一性,一张表最多一个主键, 但是可以将2个字段联合起来设置为主键. 1.选中表- 2.设计表- 3.选中字段(多个按住ctr) 4.右键设置为主键. 5.哦了,再去刷新一下.如果之前输入的数据会报错(很正常),是因为主键已经变了.只需要把数

[转载]android工程中引入另一个工程中的资源

原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以用intent等方法来解决.但是如果涉及到要共用资源,而又不能像传统java程序那样打成jar包,比如程序中有大量自定义view,而这些自定义view都引用了的一些资源文件时,就可以用这个方法. 工程一:MyViews 代码如下: public class MyTextView extends Te

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

javascript中如何让两个radio同时只能选中一个

<html> <head> <title>测试</title> </head> <body leftmargin="0" topmargin="0"> <form> <input type="radio" name="sex1" value="male">Male <br> <input typ