对于jsp技术,aspx技术的困惑

oyffffff 2017-05-09 05:34:28
最近接触了一个c#的项目,基本上是MVC结构,是基于asp.net的web项目。view层是多个cshtml文件构成(基本可以认为是以前的aspx文件),controller层由多个cs文件(c#代码)组成,数据层这里暂不讨论。

这个项目是这样的,我大概看了一下,view层的cshtml文件里面比如某个按钮会链接到js文件中的某个函数,然后这个函数会提交post请求或者get请求,然后就会链接到controller层的cs文件中的那个对应的函数了,之后就是数据处理然后返回。

现在有以下几个困惑:

1,我不知道上面讲的这个流程是不是现在web开发中主流的一个前后端交互过程?

2,基于java web的jsp技术是不是也是类似于上面.net这么一个流程?jsp文件是不是就是对应于.net中的cshtml文件?不过网上说,jsp文件会包含java代码,但我在cshtml文件中完全没找到c#的代码,要么就是html,要么就是js

3,如果jsp文件中会夹杂着大量的java代码,那这个view层和controller层岂不是粘在一块了?难道不应该是jsp文件调用js,然后js调用服务器端controller层中的java文件这样一个流程吗?

4,如果说3问题中的确是jsp文件中包含大量java代码,那的确是没有很好的解耦,那我刚刚说的那个.net的项目,这样的一个流程是不是意味着前后端解耦的还不错?

5,我有点纳闷的是,为什么那个.net项目中,我一个html文件都找不到,全都是cshtml文件,然后还有大量的js文件,和cs文件(c#代码)。

谢谢各位了,我其实是个刚进入web开发这个大海里的一个菜鸟
...全文
901 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
epui2008 2019-06-22
  • 打赏
  • 举报
回复
学而不思则罔,思而不学则殆;迷惘了,肯定是思考的多践行的少造成的;说实话,你的问题我压根也没看明白
無法替代 2019-06-19
  • 打赏
  • 举报
回复
学习了 感谢各位
baidu_27549073 2017-05-12
  • 打赏
  • 举报
回复
引用 35 楼 ddj11223 的回复:
[quote=引用 34 楼 baidu_27549073 的回复:]
[quote=引用 33 楼 ddj11223 的回复:]
[quote=引用 32 楼 baidu_27549073 的回复:]
[quote=引用 20 楼 ddj11223 的回复:]
[quote=引用 19 楼 ddj11223 的回复:]
[quote=引用 17 楼 baidu_27549073 的回复:]
1、是
2、只是你的项目没有包含,是可以包含的
3、4没有任何意义,这跟解耦没关系。
5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote]
区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。
使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。
他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。
将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.[/quote]恩,你这么说,我感觉我理解了,果然还是举例子更容易让人理解啊。动态和静态的区别,我想我是理解了。但是如果html静态页面,我应该也可以通过往里面加入js来请求controller层的函数吧,相当于是ajax了,就是加载好html静态页面后,再由浏览器来主动请求数据并通过js去把数据布置上去,而非像之前说的让服务器预先生成好数据再结合cshtml来返回,这样应该也可以吧?[/quote]
可以的,但是静态页面是所有人呢都能访问的不好做权限管理[/quote]哦对,但是现在很多人喊着jsp,aspx淘汰了,喊着前后端解耦,难道jsp,aspx解耦做得不够好,我感觉他俩不都已经把view层和controller层分开了吗[/quote]
jsp,aspx淘汰不是因为解耦做的不够好,是因为他们不能提供更酷炫的效果。像我现在之所以用aspx而少用mvc,是因为我们公司有3个游戏,每个游戏都有一套网站:网站后台,游戏后台,运营后台等。所以一般简单的功能我都使用WebForm,只有一些需要复杂前端效果的用MVC提供数据,js来展示数据。WebForm无疑更适合我现在的情况:小公司一个人维护大量平台,我的所有网站都是以WEBForm为基础,有空的时候加入了流行的bootstrap,MVC,EF,echart等各种各样的东西。一个人首先要确定自己想要做什么,然后选用相应的技术,比如网站已酷炫为主,就需要以前端框架为主,后台只负责提供数据。各种框架也不是说会用就好,各种框架其实也只是提供一个API的案例,不能帮助更快的做项目,必须自己去完善这个框架。
比如说我的项目中需要大量的数据查询,各种分页,各种筛选。我就自己封装了一些功能,比如需要一个登陆数据,在后台我只用定义对应的表,默认排序,数据库连接,参数,和前台绑定到哪个repeater。就能直接绑定数据

public partial class LoginRecord : ListBasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Table = "RecordLogon";
orderby = "LogonTime desc";
Bind(rpt, Execute(where.ToString(), Config.DBRecord));
}
public LoginRecord()
{
orderby = "userid desc";
SQLFrag.Add("uid", "and userid=@uid");
SQLFrag.Add("mac", "and logonmac=@mac");
}
}

前台页面

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form method="get" action="LoginRecord.aspx">
<label> 用户ID:<input type="number" name="uid" value="<%=GetCanshu("uid") %>"/></label>
<label> Mac:<input type="text" name="mac" value="<%=GetCanshu("mac") %>"/></label>
<input type="submit" class="btn btn-success" value="搜索" />
</form>
<table>
<tr>
<td>
用户ID
</td>
<td>
登录Mac
</td>
<td>
登录时间
</td>
<td>
离开时间
</td>
<td>
登录IP
</td>
<td></td>
</tr>
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<td>
<a href="LoginRecord.aspx?uid=<%#Eval("userid") %>"><%#Eval("userid") %></a>
</td>
<td>
<a href="LoginRecord.aspx?mac=<%#Eval("LogonMAC") %>"><%#Eval("LogonMAC") %></a>
</td>
<td>
<%#Eval("LogonTime") %>
</td>
<td>
<%#Eval("LogonOutTime") %>
</td>
<td>
<%#Eval("LogonIP") %>
</td>
<td>
<a onclick="top.OpenWinMin('LoginMacRecord.aspx','Mac汇总')">Mac汇总</a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<%=strPage %>//这是后台直接生成的分页代码
</body>
</html>

最后的效果如下:

如果是其他需求,封装出的代码又不一样
oyffffff 2017-05-12
  • 打赏
  • 举报
回复
引用 34 楼 baidu_27549073 的回复:
[quote=引用 33 楼 ddj11223 的回复:] [quote=引用 32 楼 baidu_27549073 的回复:] [quote=引用 20 楼 ddj11223 的回复:] [quote=引用 19 楼 ddj11223 的回复:] [quote=引用 17 楼 baidu_27549073 的回复:] 1、是 2、只是你的项目没有包含,是可以包含的 3、4没有任何意义,这跟解耦没关系。 5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote] 区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。 使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。 他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。 将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.[/quote]恩,你这么说,我感觉我理解了,果然还是举例子更容易让人理解啊。动态和静态的区别,我想我是理解了。但是如果html静态页面,我应该也可以通过往里面加入js来请求controller层的函数吧,相当于是ajax了,就是加载好html静态页面后,再由浏览器来主动请求数据并通过js去把数据布置上去,而非像之前说的让服务器预先生成好数据再结合cshtml来返回,这样应该也可以吧?[/quote] 可以的,但是静态页面是所有人呢都能访问的不好做权限管理[/quote]哦对,但是现在很多人喊着jsp,aspx淘汰了,喊着前后端解耦,难道jsp,aspx解耦做得不够好,我感觉他俩不都已经把view层和controller层分开了吗
oyffffff 2017-05-12
  • 打赏
  • 举报
回复
引用 36 楼 baidu_27549073 的回复:
[quote=引用 35 楼 ddj11223 的回复:] [quote=引用 34 楼 baidu_27549073 的回复:] [quote=引用 33 楼 ddj11223 的回复:] [quote=引用 32 楼 baidu_27549073 的回复:] [quote=引用 20 楼 ddj11223 的回复:] [quote=引用 19 楼 ddj11223 的回复:] [quote=引用 17 楼 baidu_27549073 的回复:] 1、是 2、只是你的项目没有包含,是可以包含的 3、4没有任何意义,这跟解耦没关系。 5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote] 区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。 使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。 他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。 将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.[/quote]恩,你这么说,我感觉我理解了,果然还是举例子更容易让人理解啊。动态和静态的区别,我想我是理解了。但是如果html静态页面,我应该也可以通过往里面加入js来请求controller层的函数吧,相当于是ajax了,就是加载好html静态页面后,再由浏览器来主动请求数据并通过js去把数据布置上去,而非像之前说的让服务器预先生成好数据再结合cshtml来返回,这样应该也可以吧?[/quote] 可以的,但是静态页面是所有人呢都能访问的不好做权限管理[/quote]哦对,但是现在很多人喊着jsp,aspx淘汰了,喊着前后端解耦,难道jsp,aspx解耦做得不够好,我感觉他俩不都已经把view层和controller层分开了吗[/quote] jsp,aspx淘汰不是因为解耦做的不够好,是因为他们不能提供更酷炫的效果。像我现在之所以用aspx而少用mvc,是因为我们公司有3个游戏,每个游戏都有一套网站:网站后台,游戏后台,运营后台等。所以一般简单的功能我都使用WebForm,只有一些需要复杂前端效果的用MVC提供数据,js来展示数据。WebForm无疑更适合我现在的情况:小公司一个人维护大量平台,我的所有网站都是以WEBForm为基础,有空的时候加入了流行的bootstrap,MVC,EF,echart等各种各样的东西。一个人首先要确定自己想要做什么,然后选用相应的技术,比如网站已酷炫为主,就需要以前端框架为主,后台只负责提供数据。各种框架也不是说会用就好,各种框架其实也只是提供一个API的案例,不能帮助更快的做项目,必须自己去完善这个框架。 比如说我的项目中需要大量的数据查询,各种分页,各种筛选。我就自己封装了一些功能,比如需要一个登陆数据,在后台我只用定义对应的表,默认排序,数据库连接,参数,和前台绑定到哪个repeater。就能直接绑定数据

    public partial class LoginRecord : ListBasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Table = "RecordLogon";
            orderby = "LogonTime desc";
            Bind(rpt, Execute(where.ToString(), Config.DBRecord));
        }
        public LoginRecord()
        {
            orderby = "userid desc";
            SQLFrag.Add("uid", "and userid=@uid");
            SQLFrag.Add("mac", "and logonmac=@mac");
        }
    }
前台页面

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form method="get" action="LoginRecord.aspx">
        <label> 用户ID:<input type="number" name="uid" value="<%=GetCanshu("uid") %>"/></label>
        <label> Mac:<input type="text" name="mac" value="<%=GetCanshu("mac") %>"/></label>
        <input type="submit" class="btn btn-success" value="搜索" />
    </form>
    <table>
        <tr>
                <td>
                    用户ID
                </td>
                <td>
                    登录Mac
                </td>
                <td>
                    登录时间
                </td>
                <td>
                    离开时间
                </td>
                <td>
                    登录IP
                </td>
                <td></td>
        </tr>
        <asp:Repeater ID="rpt" runat="server">
            <ItemTemplate>
                <td>
                    <a href="LoginRecord.aspx?uid=<%#Eval("userid") %>"><%#Eval("userid") %></a>
                </td>
                <td>
                    <a href="LoginRecord.aspx?mac=<%#Eval("LogonMAC") %>"><%#Eval("LogonMAC") %></a>
                </td>
                <td>
                    <%#Eval("LogonTime") %>
                </td>
                <td>
                    <%#Eval("LogonOutTime") %>
                </td>
                <td>
                    <%#Eval("LogonIP") %>
                </td>
                <td>
                   <a onclick="top.OpenWinMin('LoginMacRecord.aspx','Mac汇总')">Mac汇总</a>
                </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>
    <%=strPage %>//这是后台直接生成的分页代码
</body>
</html>
最后的效果如下: 如果是其他需求,封装出的代码又不一样[/quote]受教了,谢谢
oyffffff 2017-05-11
  • 打赏
  • 举报
回复
引用 32 楼 baidu_27549073 的回复:
[quote=引用 20 楼 ddj11223 的回复:] [quote=引用 19 楼 ddj11223 的回复:] [quote=引用 17 楼 baidu_27549073 的回复:] 1、是 2、只是你的项目没有包含,是可以包含的 3、4没有任何意义,这跟解耦没关系。 5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote] 区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。 使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。 他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。 将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.[/quote]恩,你这么说,我感觉我理解了,果然还是举例子更容易让人理解啊。动态和静态的区别,我想我是理解了。但是如果html静态页面,我应该也可以通过往里面加入js来请求controller层的函数吧,相当于是ajax了,就是加载好html静态页面后,再由浏览器来主动请求数据并通过js去把数据布置上去,而非像之前说的让服务器预先生成好数据再结合cshtml来返回,这样应该也可以吧?
baidu_27549073 2017-05-11
  • 打赏
  • 举报
回复
引用 33 楼 ddj11223 的回复:
[quote=引用 32 楼 baidu_27549073 的回复:] [quote=引用 20 楼 ddj11223 的回复:] [quote=引用 19 楼 ddj11223 的回复:] [quote=引用 17 楼 baidu_27549073 的回复:] 1、是 2、只是你的项目没有包含,是可以包含的 3、4没有任何意义,这跟解耦没关系。 5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote] 区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。 使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。 他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。 将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.[/quote]恩,你这么说,我感觉我理解了,果然还是举例子更容易让人理解啊。动态和静态的区别,我想我是理解了。但是如果html静态页面,我应该也可以通过往里面加入js来请求controller层的函数吧,相当于是ajax了,就是加载好html静态页面后,再由浏览器来主动请求数据并通过js去把数据布置上去,而非像之前说的让服务器预先生成好数据再结合cshtml来返回,这样应该也可以吧?[/quote] 可以的,但是静态页面是所有人呢都能访问的不好做权限管理
闭包客 2017-05-10
  • 打赏
  • 举报
回复
引用 10 楼 ddj11223 的回复:
[quote=引用 6 楼 sp1234 的回复:] 许多人以为“我可以用 asp.net 来编写用户体验超好的web应用程序”,其实这里就是有歧义的东西。asp.net 并不包含那些知识。MVC模式就是用来处理 <form action=....>表达提交、然后刷新页面的。所以这不是富客户端编程模式。 比如说我们在一个很“长”(可以无限下拉)很酷的页面中让用户选择和试看电影,然后用户一旦付费看一个电影,我们需要跳转到一个电影播放页面,那么我们在前一个页面中使用 ajax 或者 websocket 通讯方式向服务器下订单,然后直接使用
window.location.href = .........play?id=......
重定向页面就行了,这个过程并不需要提交 <form action=....> 表单。甚至,其实我们可以是单页面 web 应用,所有功能都不刷新页面,而是动态模板自动展示。 你的问题可能本身的需求就是直指富客户端编程框架,而表面上你又纠结在 asp.net 的 Controller 和 View 上了。
我所理解的view层就是前端页面的html和js这些东西,然后m层和c层就是服务器端的c#代码,我以为,只要view层不包含除了html和js以外的浏览器不认识的代码,就算是解耦了,mvc做不到这样吗?[/quote] 做不到,我现在自己正在开发一个这样的架构,就是你所说的前端只有 html、css、js 等等。 现在的 angular、react、vue 其实前端就是 html,不过也要加上绑定数据的代码。 你的想法很好。
oyffffff 2017-05-10
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
许多人以为“我可以用 asp.net 来编写用户体验超好的web应用程序”,其实这里就是有歧义的东西。asp.net 并不包含那些知识。MVC模式就是用来处理 <form action=....>表达提交、然后刷新页面的。所以这不是富客户端编程模式。 比如说我们在一个很“长”(可以无限下拉)很酷的页面中让用户选择和试看电影,然后用户一旦付费看一个电影,我们需要跳转到一个电影播放页面,那么我们在前一个页面中使用 ajax 或者 websocket 通讯方式向服务器下订单,然后直接使用
window.location.href = .........play?id=......
重定向页面就行了,这个过程并不需要提交 <form action=....> 表单。甚至,其实我们可以是单页面 web 应用,所有功能都不刷新页面,而是动态模板自动展示。 你的问题可能本身的需求就是直指富客户端编程框架,而表面上你又纠结在 asp.net 的 Controller 和 View 上了。
我所理解的view层就是前端页面的html和js这些东西,然后m层和c层就是服务器端的c#代码,我以为,只要view层不包含除了html和js以外的浏览器不认识的代码,就算是解耦了,mvc做不到这样吗?
oyffffff 2017-05-10
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
要想从用户体验出发,开发大型 web 应用,那么对不起,你必须前端解耦。 而不是在 asp.net 服务器端去过分去分层。
啊...我一直以为view层就是前端页面啊,难道我理解错了?
oyffffff 2017-05-10
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
web 开发的“主流”核心架构是用户交互,而不是什么“前后端交互”。前后端交互是b/s 交互技术概念,它必须随着用户交互需求(也就是 Web2.0、web3.0......)和通讯技术不断演进。许多人忽略了编程设计重点,而纠结底层的一点东西,这个时候争论“主流”就可能跟不上形势。 比如说web服务器端的 mvc 开源框架在很早就出现,asp.net mvc 也是模仿10几年前的 struts,而在 java 中也有很多种 mvc 形式(而 asp.net 因为比较封闭所以只有一种)。而 java 始终没有什么类似 webform、asp.net ajax 服务器端控件 那样的几十个企业级服务器端控件。虽然这些都过时了,但是过去就是如此,asp.net 在看到服务器端控件的模式整体要被抛弃的时候,也没有什么新东西拿出来。所以这些都不是什么新的东西。 在 view 中的所有数据绑定的东西,你都可以说是 c# 的。只不过是语法跟 .cs 文件中的代码的语法不同罢了。你不能说 view 中只有 html 和 js。不论是 html 还是 js 都不是在服务器端渲染和执行的,所以 view 模板使用来动态绑定输出 html 给浏览器端的。 mvc 是最简单的一个概念。controller 处理 <form action=...> 的请求,然后绑定 view 产生 html输出给浏览器端。你只有先学会了 html/css/javascript 网站应用编程,才能学好 web 服务器端编程。这个时候其实就是通过这种 <form action=.....> 提交和反复一遍遍刷新页面的形式来处理。实际上我们可以看到,富客户端 web 编程根本不走这个方式,所以 asp.net mvc 其实对于这种 web 应用系统开发是没有什么用处的。但是假设你被微软的热情冲昏了头脑,可能以为富客户端的应用也靠asp.net mvc 编程。 回到你的“解耦”的问题,Controller 是用来接收 <form action=.....> 提交的数据的,这里仅仅是接收前端表单数据,然后 Controller 就产生了数据转换来计算出输出的数据。然后找到对应的 View 来绑定输出数据到产出的 html 代码上。你说这有没有解耦? 只不过 mvc 其实谁最简单的框架,没有多少技术深度的东西,所以你觉得不相信它如此简单。 你的最后一个问题,要知道asp.net或者 jsp 之类的都是动态html 生成语言,它自然是产生 html 输出的工具。你只知道去找静态 html 文件是不对的。
谢谢回答。你的意思是富客户端不需要一遍遍刷新,直接用ajax来获取数据并且由js来负责更新。这个我感觉就是解耦了吧,html和js来当view层(view层不包含任何后端的代码),服务器端代码做m层和c层,这样不就是mvc的一个概念吗?我前端html和js学过一点,后端的java和c#也学过一点,但唯独就是两者结合起来构成一个网站的运作这方面我还是空白,所以有些地方概念不是很清楚,还请多多指教
  • 打赏
  • 举报
回复
要想从用户体验出发,开发大型 web 应用,那么对不起,你必须前端解耦。 而不是在 asp.net 服务器端去过分去分层。
  • 打赏
  • 举报
回复
许多人以为“我可以用 asp.net 来编写用户体验超好的web应用程序”,其实这里就是有歧义的东西。asp.net 并不包含那些知识。MVC模式就是用来处理 <form action=....>表达提交、然后刷新页面的。所以这不是富客户端编程模式。 比如说我们在一个很“长”(可以无限下拉)很酷的页面中让用户选择和试看电影,然后用户一旦付费看一个电影,我们需要跳转到一个电影播放页面,那么我们在前一个页面中使用 ajax 或者 websocket 通讯方式向服务器下订单,然后直接使用
window.location.href = .........play?id=......
重定向页面就行了,这个过程并不需要提交 <form action=....> 表单。甚至,其实我们可以是单页面 web 应用,所有功能都不刷新页面,而是动态模板自动展示。 你的问题可能本身的需求就是直指富客户端编程框架,而表面上你又纠结在 asp.net 的 Controller 和 View 上了。
  • 打赏
  • 举报
回复
引用 2 楼 ddj11223 的回复:
谢谢回答,如果jsp或者aspx中包含java代码或者c#代码,是不是就必须放在服务器端运行一下然后再返回给浏览器?那如果不包含的话呢,是否就意味着它们只充当view部分,可以直接被浏览器解析,不需要在服务器端运行?但我记得html文件中也可以包含js代码,那html文件岂不是也可以来做view层?
这就跟前端 web 应用模式有关。你如果学习的 web 应用是不走 <form action=....> 这种表单提交、刷新整页面的形式,你就在另外一个广阔天地中遨游,而你问的问题始终是服务器端 mvc。 实际上富客户端是前端独立的应用程序,比如说2个小时也不刷新一次页面。那么其前端模板、数据、样式、js代码等等,都可以通过 ajax.get 或者 websocket 等等等等通讯形式拉取到前端(浏览器运行时),在前端处理。此时直接拉取 html 片段当然是最好的,为什么还要服务器端 asp.net 程序产生 html 呢? 于是,你的问题其实就应该是,“前端View应该直接使用 html文件”。而且这些 html 文件其实不需要是完整网页,是一些片段 html 就可以了。例如在一个页面上可以用
<div my-binding="template:{name: xxxx, data: yyyy, if: zzz>100}"></div>
这样前端框架就能在zzz大于100时就去自动下载xxxx模板,放到 <div>里边,跟数据 yyyy绑定在一起(10几行html代码可能绑定出上千行 html 代码);当zzz<=100时前端框架又会自动清空<div>中的内容。 而且页面上可以有许多这样的模板绑定,模板中可以嵌套模板。页面是组件化的。所以你说的 View不但可以使纯 html,而且是片段html,而且页面上可以重复使用相同模板,可以在页面上作为组件来随意搭积木、卡榫卯一样地动态搭在一起。 但是要知道这些都是前端框架知识。而此时 asp.net 端的代码没用。
正怒月神 版主 2017-05-10
  • 打赏
  • 举报
回复
cshtml就是视图view部分。 当中可以嵌套C#代码。 至于你说的是否捆绑在一起。其实cshtml中的C#代码,只是控制model或者viewmodel数据的显示或者少许的逻辑判断。
  • 打赏
  • 举报
回复
web 开发的“主流”核心架构是用户交互,而不是什么“前后端交互”。前后端交互是b/s 交互技术概念,它必须随着用户交互需求(也就是 Web2.0、web3.0......)和通讯技术不断演进。许多人忽略了编程设计重点,而纠结底层的一点东西,这个时候争论“主流”就可能跟不上形势。 比如说web服务器端的 mvc 开源框架在很早就出现,asp.net mvc 也是模仿10几年前的 struts,而在 java 中也有很多种 mvc 形式(而 asp.net 因为比较封闭所以只有一种)。而 java 始终没有什么类似 webform、asp.net ajax 服务器端控件 那样的几十个企业级服务器端控件。虽然这些都过时了,但是过去就是如此,asp.net 在看到服务器端控件的模式整体要被抛弃的时候,也没有什么新东西拿出来。所以这些都不是什么新的东西。 在 view 中的所有数据绑定的东西,你都可以说是 c# 的。只不过是语法跟 .cs 文件中的代码的语法不同罢了。你不能说 view 中只有 html 和 js。不论是 html 还是 js 都不是在服务器端渲染和执行的,所以 view 模板使用来动态绑定输出 html 给浏览器端的。 mvc 是最简单的一个概念。controller 处理 <form action=...> 的请求,然后绑定 view 产生 html输出给浏览器端。你只有先学会了 html/css/javascript 网站应用编程,才能学好 web 服务器端编程。这个时候其实就是通过这种 <form action=.....> 提交和反复一遍遍刷新页面的形式来处理。实际上我们可以看到,富客户端 web 编程根本不走这个方式,所以 asp.net mvc 其实对于这种 web 应用系统开发是没有什么用处的。但是假设你被微软的热情冲昏了头脑,可能以为富客户端的应用也靠asp.net mvc 编程。 回到你的“解耦”的问题,Controller 是用来接收 <form action=.....> 提交的数据的,这里仅仅是接收前端表单数据,然后 Controller 就产生了数据转换来计算出输出的数据。然后找到对应的 View 来绑定输出数据到产出的 html 代码上。你说这有没有解耦? 只不过 mvc 其实谁最简单的框架,没有多少技术深度的东西,所以你觉得不相信它如此简单。 你的最后一个问题,要知道asp.net或者 jsp 之类的都是动态html 生成语言,它自然是产生 html 输出的工具。你只知道去找静态 html 文件是不对的。
oyffffff 2017-05-10
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
1、其实就是mvc了,这个流程应该是目前web开发的主流。 2、jsp其实对应于aspx,cshtml是充当mvc中的视图部分。jsp可以嵌入java,aspx也可以嵌入c#,cshtml也可以嵌入c#。 3、jsp本来就允许嵌入大量java代码,所以java web中一般用servlet作为controller,jsp只充当视图部分,并且要求尽量少的嵌入java代码。jsp中可以有大量js,并使用ajax与后台servlet交互。 4、jsp包含大量java,确实不是很好的解耦。所以java web开发引入了struts spring hibernate或者spring mvc mybatis这样的框架,实现mvc。对应的,微软推出的asp.net mvc就是mvc框架的实现。 5、这就是asp.net mvc的设计思想。cshtml可以通过razor语法在页面中输出c#对象,而html不行。
谢谢回答,如果jsp或者aspx中包含java代码或者c#代码,是不是就必须放在服务器端运行一下然后再返回给浏览器?那如果不包含的话呢,是否就意味着它们只充当view部分,可以直接被浏览器解析,不需要在服务器端运行?但我记得html文件中也可以包含js代码,那html文件岂不是也可以来做view层?
baidu_27549073 2017-05-10
  • 打赏
  • 举报
回复
引用 20 楼 ddj11223 的回复:
[quote=引用 19 楼 ddj11223 的回复:] [quote=引用 17 楼 baidu_27549073 的回复:] 1、是 2、只是你的项目没有包含,是可以包含的 3、4没有任何意义,这跟解耦没关系。 5、你又没有给别人说你想要HTML格式的,别人肯定不会照顾你的口味
这个项目里的cshtml文件里面全都是html代码和js代码,没有任何c#代码,那这个cshtml文件和html文件还有啥区别[/quote] 区别是调用逻辑不通,使用cshtml和controller,请求先到controller的action方法然后根据action返回相应的cshtml文件。如访问http://www.baidu.com/Home/Index 是访问的Homecontroller的Index()然后来生成对应的html。 使用html是直接解析的html地址。如访问 http://www.baidu.com/index.html。IIS直接给你返回index.html这个静态页面。 他们都是HTML的载体,但是html就是html,而cshtml是一种模板,可以动态改变cshtml的属性,即使cshtml没有任何C#代码,但是还是可以在后台控制,比如在action中判断是否登录,未登录跳转到404。而html不具有这种功能。 将Html跟chtml比是不对的,html对应的应该是整个MVC请求最后生成的动态HTML.
tangx10 2017-05-10
  • 打赏
  • 举报
回复
用户体验是关键
闭包客 2017-05-10
  • 打赏
  • 举报
回复
引用 29 楼 ddj11223 的回复:
[quote=引用 27 楼 closurer 的回复:] [quote=引用 26 楼 ddj11223 的回复:] [quote=引用 25 楼 closurer 的回复:] [quote=引用 24 楼 ddj11223 的回复:] [quote=引用 23 楼 closurer 的回复:] [quote=引用 22 楼 ddj11223 的回复:] [quote=引用 21 楼 wanghui0380 的回复:] 在最新一代的项目里 你view工程可以什么都没有,只是一堆html和js 你的control工程,可以是nodejs(nodejs好处是轻量,同时本身就是js对象,他不存在前后端对象转换的问题,坏处嘛就是你的跟js这个最不讲道理,最无厘头的语言打交道了),可以是net core,可以标准的net,他只需支持rest和websocet双工通讯 你的model工程,这个就见仁见智了,你可以要,可以不要。比如我和sp1234都比较喜欢knockout,因为这个比anglr,vue轻量,同时也有工具将你的model转换成复合knockout对象的vs插件(当然你也可以自己找生成vue或angrl对象的插件) 这样的项目架子,谁说他不不具备可行性呢?
大神,看起来mvc现在也要被淘汰了啊,我居然才刚刚开始接触。。。难道.net的mvc架构的view里面不能只包含html和js吗?一定要含有服务器端的代码?做ajax不就行了嘛[/quote] 可以的,尤其是不需要做 SEO 的网站,可以这样做。 [/quote]但是第一次请求这个网页的时候,还是得需要服务器端来处理的,接下来就可以全靠ajax了[/quote] 不是这样理解的。都得服务器来处理,我的意思是不需要写 razor,就是 @ 啊 <% %> 之类的标记。 [/quote]你的意思是cshtml文件里面必须要写c#代码?我感觉不用啊,我ajax之后得到的数据交给js去更新web页面不就行了吗?[/quote] 呃……你说得对,相信自己……实践出真知…… [/quote]你这么说,我感觉我好菜啊,主要是别人的项目,所以我想着我自己先大致了解点之后,再去问别人,这样他讲起来我至少能够听得懂,不然我怕我听得云里雾里[/quote] 前后端分离是好事,有利于分工,增加可维护性。 但是从逻辑上来说,再怎么分,都是一个系统,需要建立联系的……至于怎么建立这种联系,真是个说不尽的话题……
加载更多回复(19)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧