客户端系统后台的开发模式变为MVC,页面保持原来的样子,然后我这两周的任务就是做其中的一个模块。完全没有接触过,什么都不懂,磕磕碰碰算是把功能都实现了。就记下一些做的过程中印象比较深刻的东西
----------------------------------------------------------------------------------------------------------------------------------------------------------
怎么开始:
根据模板页,补全缺的东西就好
项目模板页:
<! DOCTYPE html >
< html >
< head >
< title> @ ViewBag. Title </title >
@ Html. Partial ("_Head" )
@ Html. LinkStyleTag ("yewu/comm/css/base.css" )
@ RenderSection ("head" , required: false )
</ head >
< body class = "tabpage" >
< div class ="main" >
@ if ( Request .QueryString [ "no_breadcrumb" ] == null)
{
< div class ="breadcrumb-bar" >
@ Html. MvcSiteMap (). SiteMapPath ()
< div class ="page-nav-btns" >
< i id ="btnBack" οnclick= "location.href=' @ Request. UrlReferrer '" title ="返回上一页面" class = "icon-arrow-left" ></i >
< i onclick ="document.location.reload()" title= "刷新页面" class= "icon-refresh" ></ i>
< a id ="btnOpenIframe" style= " display: none" href = "@ Request .RawUrl " title = "在新Tab中打开" target = "_blank" ><i class= "icon-chevron-up" ></ i></ a >
< i id ="btnFullSize" title= "最大化界面" class= "icon-resize-full" ></ i>
< i id ="btnSmallSize" title= "恢复原始大小" class= "icon-resize-small" style= " display: none" ></ i>
</ div>
</ div>
}
@ RenderSection ("tabbar" , required: false )
< div class ="content" >
@ RenderBody()
</ div> <!-- /.content -->
</ div> <!-- /.main -->
@ RenderSection ("scripts" , required: false )
@ Html. Partial ("_Footer" )
</ body >
</ html >
老大写好默认模板页,每个页面我只需写加粗部分,其中
@ RenderSection 是可选的 required: false就是可以不写,该页面有相关内容就写。
示例PiccAccepted.cshtml
@section head{
@ Html. LinkStyleTag ("yewu/client/Insured/picc-table.css" )
}
@section tabbar{
< ul class ="nav nav-tabs" >
< li>< a href = "PiccPending" >未投保 </ a></ li >
< li>< a href = "PiccSubmited" >投保中 </ a></ li >
< li class ="active" >< a href ="PiccAccepted" > 已投保 </a ></ li>
< li>< a href = "PiccApplyed" >已索赔 </ a></ li >
</ ul>
}
/*
RenderBody()里面的内容*/
blablablabla....
@section scripts{
}
总不是每个页面都使用默认模板页的,可以不用,只需在前面加上
@{Layout=null;}
也可以指定其他模板页滴,不过暂时没这个需求。。。我也就没去查具体怎么做。。。
接下来就是看懂后台的接口是该怎么用什么时候用.
----------------------------------------------------------------------------------------------------------------------------------------------------------
开发中遇到的问题:
一:
要获取当前url,获取请求当前url的上一个url
/*获取当前url,判断是否为PiccApplyed,决定是否显示状态下拉列表*/
var i =
HttpContext .Request . Url. ToString (). IndexOf ("/Insured/" );
var url = HttpContext .Request . Url. ToString (). Substring (i + 9 ,11 );
if (url == "PiccApplyed" )
ViewBag .IsApplyed = true ;
else
ViewBag .IsApplyed = false ;
/*获取上一个url,并拿到”/“最后的那个值*/
var i =
Request . UrlReferrer. ToString (). LastIndexOf ("/" );
ViewBag .ListUrl = Request .UrlReferrer . ToString() . Substring( i + 1);
二:
显示数据库中的图片。
其实除了引用System.Web.Mvc命名空间,还有using System. Drawing ;
using System. Drawing .Imaging ;
根据自己项目的接口改一下函数名或者转换一下数据类型什么的就可以了。
然后在view层使用:
< div class ="pics" >
< img src ="./../GetPicture/ @ PicId" alt= "" />
</ div>
三:
A、B、C、D四个页面同时公用同一个搜索的form F,所以就抽出来单独作为一个块,then,我使用了@{Html.RenderPartial("F")},然后为那个页面写了一个action,form所需要的下拉列表的字典也在这里定义,然后发现页面上不能下拉列表的内容。。。只能在几个页面分别再定义一次,当然也只是调用一个函数,我把那个函数定义在Model层了。(不过还是有点笨。。。)然后,今早无意发现了有@{Html.RenderAction},于是,就进行了改写。
顺便mark下网上看来的东西。
@Html.Action:需要有对应的Action,并且Action方法
有返回值。(注:处理完业务逻辑同时,也需要返回所需值)
@{Html.RenderAction}:需要有对应的Action,Action方法
没有返回值。(注:只处理业务逻辑,不需要返回值)
@Html.Partial:不需要有Action,直接取ViewName对应的页面内容,
有返回值。(注:Patial的数据来自于调用的View)
@{Html.RenderPartial}:不需要有Action,直接获取ViewName对应的页面内容,
没有返回值。(注:RenderPatial的数据来自于调用的View)
RenderPartial和RenderAction
两者的相同点
RenderPartial和RenderAction通常都被用来显示一个功能相对独立的“块”,比如说显示菜单或者导航条。 两者输出的结果都被作为调用的View的一部分显示。
两者的
不同点
1.RenderPatial的数据来自于调用的View,而RenderAction来自自己。
2.RenderAction会发起一个新的Request,而RenderPatial不会。
小总结:“
Render“就是有没有返回值的区别,”Action“和”Partial“就是数据来源,多次使用且要数据的话就用Action了。
action最后是Return PartialView();