在ASP.NET MVC中我不能做的事情

在ASP.NET MVC中我不能做的事情,asp.net,asp.net-mvc,webforms,Asp.net,Asp.net Mvc,Webforms,是否有一些事情我不能用ASP.NET MVC来做? 只有使用ASP.NET WebForms才能实现的功能, 或者说使用WebForms非常简单 我们考虑使用ASP.NET MVC进行一个新项目。 但是我想知道,与WebForms相比,是否有一些明显的事情我们不能用ASP.NET MVC来做,或者我们需要花很多时间用ASP.NET MVC的地方。我认为MVC中不存在视图状态。除了非MVC项目中的内置视图状态外,您还必须以其他方式跟踪自己的视图状态 编辑: 根据评论:“摆脱ViewState是一种

是否有一些事情我不能用ASP.NET MVC来做? 只有使用ASP.NET WebForms才能实现的功能, 或者说使用WebForms非常简单

我们考虑使用ASP.NET MVC进行一个新项目。


但是我想知道,与WebForms相比,是否有一些明显的事情我们不能用ASP.NET MVC来做,或者我们需要花很多时间用ASP.NET MVC的地方。

我认为MVC中不存在视图状态。除了非MVC项目中的内置视图状态外,您还必须以其他方式跟踪自己的视图状态

编辑:
根据评论:“摆脱ViewState是一种优势,而不是劣势。”克雷格最大的问题是控制。ASP.NET MVC不提供用户控件。我甚至尝试使用如下代码:

new Label().RenderControl(...ResponseStream...);
没有骰子

当然,作为其中的一部分,不需要视图状态,因此视图状态不在其中


不过,服务器控件确实可以工作。

最大的一个是在表单上使用现有的第三方控件。大多数内置控件都很容易复制,但是如果您有一个pet第三方控件,您可能必须在常规(非MVC)aspx页面上托管该控件(幸运的是,这是受支持的)

同样,“web部件”

另外,ASP.NET为不同的客户端(移动设备等)使用不同html的功能变得。。。不同的;您不希望手工完成这项工作,但实际上大多数客户机现在都使用标准html,因此从一开始就不太成问题

有些东西,比如i18n via resx文件,需要比普通MVC模板做更多的工作,但是示例在互联网上

一点。。。MVC仅许可用于MS/ASP.NET;所以有一件事你不能做(据我所知,在不违反条款的情况下),那就是在mono/Apache中运行它——但是IANAL

现在考虑M<强> > < /强>,你不能(或很难)使用香草:

  • 路由而不是页面
  • 自动输入解析(操作参数)
  • 正确的html控件
  • …为简单AJAX启用jQuery等
  • 关注点分离
  • 可测试性
  • 国际奥委会/国际奥委会
  • 多个模板选项(不仅仅是aspx/ascx)

再输入分辨率:

public ActionResult Show(string name, int? page, int? pageSize) {...}
将从路由、查询字符串或表单中选择“name”、“page”和“pageSize”,这样您就不必花费大量时间来选择请求值


重新模板-aspx/ascx不是唯一的模板选项。例如,见;或者你可以写你自己的如果你喜欢。。。该视图根本不与ASP.NET控件绑定,正如Marc所说,第三方工具和(服务器端)网络控件无法使用。因此,通过拖放表单上的几个控件(如网格和dataaccess控件)来快速组合某些内容已不再是一种选择


但通过代码生成等,您仍然可以快速制作一些东西。如果你需要一些快速的东西,你仍然有上面的选择

验证不像WebForms那么容易。在Webforms中,您可以添加一个验证器,只需设置一个启用客户端验证的属性。您可以本地化错误消息。本地化工作在客户端和服务器端

MVC中没有现成的客户端验证,您需要找到一种方法来本地化客户端错误消息

本地化本身是不同的。默认情况下,每个页面都不存在资源,因为没有页面。但是有一种很好的方法可以让每个视图都有资源

我仍然没有检查,是否可以设置每个文件夹所需的SSL

编辑

MVC3的情况不同。现在有一个很好的验证支持


还有一些东西没有在MVC中实现。对我来说,最大的问题是甜甜圈兑现和部分兑现的完整实现。MVC3在这方面有一些改进,但仍不完整。无论如何,请继续关注:MVC团队必须意识到这是他们应该做的事情。

ASP.NET Ajax不适用于ASP.NET MVC,因此没有UpdatePanel(由于缺少回发)。幸运的是,有内置的ajax(ajax.Form),可以用来执行部分更新,更不用说默认情况下随Visual Studio项目模板一起提供的jQuery了。

,您可以使用部分视图来实现类似的功能这是通过设计实现的:MVC方法试图创建简单性,并对呈现的标记进行更精确的控制MVC有用户控件,而没有服务器控件,因为它们是为配合WebForms模型而设计的。因为MVC并不意味着可视化拖放,所以不需要事件驱动型开发服务器控件。这不是疏忽,而是设计决策。拖放控件称为用户控件。服务器控件是为其编写RenderControl方法的控件。我从来没有说过这不是一个设计决策,但仅仅说这是不对的,因为他们计划在未来的版本中包含用户控件。用户控件是.ascx文件,已经作为部分支持。asp:Textbox等是服务器控件,您可以使用designer支持编写自己的控件。MVC有一个ViewData键/值集合,可在POST上持久保存以维护状态。TempData集合也用于一次性状态更改:例如,状态消息“thisrecord was deleted”ViewState是WebForms回发模型的一部分,在MVC中没有任何用处,这与PHP或Python中没有使用的方式相同。摆脱ViewState是一个优势而不是劣势。对Craig来说+1。Viewstate是最好的,只是一个平庸的东西,在最坏的情况下,它是一个完全令人厌恶的东西。我们最好把它扔掉。谢谢你的回复,这让我更加确信使用mvc是相对安全的。然而,我不明白你在“自动输入分辨率”、“IoC/DI”和“多te”方面的观点背后是什么