一个ActionResult中定位到两个视图—<团委项目>

简介: 一个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);
        }
}


<strong>解释:通过在前面Index列表中点击项目的详情,我们可以得到不同的ID,根据ID取到项目,接着通过项目的分类我们将其分开,这样就可以各自返回到自己的视图,这里我们需要添加模型过去,应为我们两个页面里面的模型是不一样的。</strong>
return View("InnovateProjectDetails", model);



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



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

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


这样就可以实现效果了。


截图如下。


679140-20160321232614089-1797449010.png


679140-20160321232615667-1339569226.png679140-20160321232617276-1526058499.png


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



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

目录
相关文章
|
2月前
|
设计模式 API 数据处理
Spartacus 在 PDP 页面点击 Add to Cart 之后,读取最新 product 数据的设计
Spartacus 在 PDP 页面点击 Add to Cart 之后,读取最新 product 数据的设计
|
2月前
|
前端开发 搜索推荐 开发者
Spartacus empty cart 页面的显示逻辑
Spartacus empty cart 页面的显示逻辑
|
2月前
|
前端开发 搜索推荐 JavaScript
Spartacus Cart item 点击了 remove 之后 HTTP Delete 请求的触发逻辑 - Adapter
Spartacus Cart item 点击了 remove 之后 HTTP Delete 请求的触发逻辑 - Adapter
|
9月前
|
JavaScript 前端开发 应用服务中间件
关于 Angular 部署以及 index.html 里 base hRef 属性的关联关系
关于 Angular 部署以及 index.html 里 base hRef 属性的关联关系
el-select 数据回显,只显示value不显示lable
el-select 数据回显,只显示value不显示lable
el-select 数据回显,只显示value不显示lable
|
安全 Java
自定义JSP[if,foreach,数据,select]标签
自定义JSP[if,foreach,数据,select]标签
自定义JSP[if,foreach,数据,select]标签
|
iOS开发 Android开发
&lt;link&gt;:外部资源链接元素
HTML外部资源链接元素 (&lt;link&gt;) 规定了当前文档与外部资源的关系。该元素最常用于链接样式表,此外也可以被用来创建站点图标(比如PC端的“favicon”图标和移动设备上用以显示在主屏幕的图标) 。
SAP Spartacus cost center list里通向detail页面的url生成逻辑
SAP Spartacus cost center list里通向detail页面的url生成逻辑
SAP Spartacus cost center list里通向detail页面的url生成逻辑
SAP Spartacus B2B Unit List跳转到Unit Detail页面的路由执行逻辑
从list页面随便点击一个项目,跳转到org明细页面:
SAP Spartacus B2B Unit List跳转到Unit Detail页面的路由执行逻辑