首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ASP,NET webform 与MVC 的编译有关问题

2013-11-29 
ASP,NET webform 与MVC 的编译问题之前一直学习的是webform 最近在用MVC做网站。发现个问题大家可以讨论下:

ASP,NET webform 与MVC 的编译问题
之前一直学习的是webform 最近在用MVC做网站。
发现个问题大家可以讨论下:
在webform程序里,编译好网站放到服务器之后,在不存在源码的情况下可以直接复制服务器中的.aspx文件并另存为一个其他的文件名,这时候因为新的文件名里的网页应用的都是编译好的dll里面已经存在的函数、类等、所以在url中输入对应的文件名是可以打开这个新的页面的。随后,我们可以在新的页面中修改样式等等。


然而在mvc中,一个页面对应一个action和view,url先经过路由查找对应的action后返回视图,而且这个视图也是固定的。也就是说我在服务器上面直接复制一个原来的页面文件(aspx、cshtml)等等,重命名之后输入新的url是不能打开这个新的页面了。因为在对应的ctroller中并没有注册新页面的action。


以上就是问题:
现在,因为涉及到网站的维护、修改或者增加页面工作不可能每次更改都要在本地编译一次再上传(维护人员懂html,css但不懂asp.net)。这样那上面我提到的问题怎么能解决呢?

不知道我把问题说明白了没有。


刚才csdn抽风了,害我重新打了一遍
[解决办法]
反正我是看明白问题的了

新增一个页面貌似不是好搞的,除非是静态页面之类的

维护的时候可以先把原来的view给backup一份的,然后直接修改的,成功了就把backup删除掉的,不成功就用原来的覆盖的,这样唯一的问题就是要在没有人用的时候修改的。
[解决办法]
可以这样。

建立一个公用的controller。 


public ActionResult login(string id)  //这个ID是你新页面的名称

 return view(id);  
}

到时候你访问的时候 。 只需要这样.例: http://xxx.com/user/login/newpage 
return view() 会 转向到newpage视图!
[解决办法]
引用:
引用:引用:可以这样。

建立一个公用的controller。 

C# code?1234public ActionResult login(string id)  //这个ID是你新页面的名称{  return view(id);  }
到时候你访问的时候 。 只需要这样.例: http……

1.如果加get参数 你可以再后面加就行啊http://xxx.com/user/login/newpage?id=111&id2=1212。或者你可以修改路由设置。 也可以做成http://xxx.com/user/login/newpage/参数1/参数2/参数3

2.不需要,。你只需要建立一个controller就行 。 把改后的所有页面都让它访问这个控制器就行.如果不行的话 。可以用filter ,在进每个action前判断一下!
[解决办法]
写个配置文件,把新加的View和action映射起来。

写个filter,在请求action之前,读取配置文件里的映射关系,动态更改action。

再把这个filter加到每个controller上面。
[解决办法]
如果是新增页面,肯定要在控制器中添加东西,也可能要新建控制器,而这种操作,当然要编译,就像WebForm中,新建一个页面,.cs文件也要重新编译一样

如果只是页面的样式或者JS修改,只需要把View下对应的页面上传就可以,不需要重新编译
[解决办法]
引用:
之前一直学习的是webform 最近在用MVC做网站。
发现个问题大家可以讨论下:
在webform程序里,编译好网站放到服务器之后,在不存在源码的情况下可以直接复制服务器中的.aspx文件并另存为一个其他的文件名,这时候因为新的文件名里的网页应用的都是编译好的dll里面已经存在的函数、类等、所以在url中输入对应的文件名是可以打开这个新的页面的。随后,我们可以在新的……

用partialview就可以
[解决办法]
这个问题解决起来很简单,重写Controller的HandleUnknownAction方法就可以了,把下面这段代码加到你的Controller中即可:


protected override void HandleUnknownAction(string actionName)
        {
            var result=ViewEngines.Engines.FindView(ControllerContext, actionName, null);
            if (result.View != null)
            {
                View(actionName).ExecuteResult(ControllerContext);
            }
            else
            {
                base.HandleUnknownAction(actionName);
            }
        }

热点排行