|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
语言是不是不是最重要的?看到AnyTao和TerryLee分享的关于ASP.NETMVC利用和优化的技能,难免手痒,也分享一下这一年多来ASP.NETMVC开辟的堆集。 个中一定是一些高效的技能,可是切实其实是能办理成绩,也一定有甚么深邃的道理,只是我以为值得分享。
1.Controller来把持HTML的Title
我想年夜部分伴侣都有在Controller内里指定Html页面Title的需求。
我习气于先写利用的代码再往完美实在现,而指定一个Title最便利的情势莫过于:
1:publicActionResultIndex(intid){
2: vararticle=Db.GetArticle(id);//猎取数据库里的文章
3: Title=article.Name;
4: returnView();
5:}
固然,这段代码是不克不及实行的,由于Controller并没有内建的Title属性,不外不妨,我们能够自界说一个:
1:abstractpublicclassMyBaseController:Controller{
2: publicstringTitle{
3: set{
4: ViewData["Page_Title"]=value;
5: }
6: }
7:}
然后将我们的Controller换为这个MyBaseController,以后在Master中写ViewData[“Page_Title”]的输入就行了。
1:<title><%=ViewData["Page_Title"]%></title>
OK,这个乐意完成了。
固然做SEO的话Keyword和Description也能够如许来弄。
2.ViewModel中传送Controller中界说的高低文
老赵非常推ViewModel因而我也做了很多这方面的理论,发明切实其实不错。可是有个成绩,就是Controller中发生的高低文怎样传到View中往,好比说自界说的用户信息,等一些非static的范例,而我又不想到View中再实例化一遍。
办理办法:ViewModel中另加一高低文属性(在我和程序中这些高低文承继于IContext接口,而在Controller中它的属性是CHContext)
1:publicclassHomeIndexViewModel{
2: publicIContextContext{get;set;}//这个属性就是办理它的办法
3: publicstringMessage{get;set;}
4:}
而我在Controller中:
1:publicActionResultIndex(){
2: HomeIndexViewModelmodel=newHomeIndexViewModel{
3: Context=CHContext,//这里传送
4: Message="WelcometoASP.NETMVC!"
5: };
6: returnView(model);
7:}
而View中:
1:<%@PageLanguage="C#"MasterPageFile="~/Views/Shared/Site.Master"
2:Inherits="System.Web.Mvc.ViewPage<HomeIndexViewModel>"%>
3:<asp:ContentID="indexTitle"ContentPlaceHolderID="TitleContent"runat="server">
4: HomePage
5:</asp:Content>
6:<asp:ContentID="indexContent"ContentPlaceHolderID="MainContent"runat="server">
7: <h2><%=Html.Encode(Model.Message)%></h2>
8:</asp:Content>
如许我们就能够完成将Controller中发生的自界说高低文传送了。不外每一个ViewModel都初始化一个IContext,不免太甚频仍,也累人,因而进一步改善,我们使用感化在Controller上的Filter,在Controller的基类我们自界说的MyBaseController中写以下Filter,而完成这个功效则要一切的ViewModel承继于一个类:MyBaseViewModel:
MyBaseViewModel与Model:
1:publicclassMyBaseViewModel{
2: publicIContextContext{get;set;}
3:}
4:
5:publicclassHomeIndexViewModel:MyBaseViewModel{
6: publicstringMessage{get;set;}
7:}
Controller与Filter
1:abstractpublicclassBaseController:Controller{
2: protectedoverridevoidOnResultExecuting(ResultExecutingContextfilterContext){
3: varm=ViewData.ModelasBaseViewModel;
4: if(m!=null){
5: m.Context=CHContext;//在这里初始化
6: }
7: }
8:}
这回我们在Controller里利用时就清新了,不必再传送CHContext了
感觉很多控件都必须自己去写代码;用了WebMatrix感觉也不是很好,毕竟没有很强的WYSIWYG效果。现在就不知道如何是好了。 |
|