English 中文(简体)
我无法在ASP.NET MVC中做的事情
原标题:
  • 时间:2009-03-29 06:44:19
  •  标签:

Are there some things I cannot do with ASP.NET MVC? Things that are only possible with ASP.NET WebForms, or extremely much easier with WebForms?

We consider using ASP.NET MVC for a new project. But I wonder if there are some obvious things we will not be able to do with ASP.NET MVC when compared to WebForms, or places where we will have to spend a lot of time with ASP.NET MVC.

最佳回答

最大的一个问题就是在表单上使用现有的第三方控件。大多数内置控件都很容易重现,但如果您有一个特殊的第三方控件,则必须在常规(非MVC)aspx页面上进行托管(幸运的是这是被支持的)。

同样,"Web 部件"

另外,ASP.NET使用不同的HTML编码以适应不同的客户端(移动端等)的功能变得...不同了;您不想手动完成这项工作,但实际上大多数客户现在都使用标准的HTML,因此这就不再是问题。

一些像通过resx文件进行i18n的事情需要额外的工作,而不仅仅是基本的MVC模板,但这些样例都可以在互联网上找到。

一个要点是...MVC 只授权给 MS/ASP.NET;所以你不能做的一件事(如果我理解正确的话)就是在 Mono/Apache 上运行它 - 但我不是律师。

现在考虑使用MVC,你可以做到的事情,而在基础版本中无法做到或难以做到的事情:

  • routes instead of pages
  • automated input resolution (action arguments)
  • proper html control...
  • ...enabling jQuery etc for simple AJAX
  • separation of concerns
  • testability
  • IoC/DI
  • multiple templating options (not just aspx/ascx)

重新输入分辨率:

public ActionResult Show(string name, int? page, int? pageSize) {...}

将“名称”,“页数”和“页面大小”从路径、查询字符串或表单中取出 - 这样您就不必花费大量时间来挑选请求值。

关于模板- aspx/ascx不是唯一的模板选项。例如,请参见这里;或者如果你愿意,你可以编写自己的模板引擎...视图不与ASP.NET控件绑定

问题回答

验证不像WebForms那样简单。在WebForms中,您可以添加验证器并只设置启用客户端验证的属性。您可以本地化错误消息。本地化在客户端和服务器端都可以工作。

MVC中没有开箱即用的客户端验证,您需要找到一种方法来本地化客户端错误消息。 (Chinese translation by an AI)

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

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

编辑

这个故事与MVC3不同。现在有很好的验证支持。

仍有一些未在MVC中实施的事情。对我来说最大的问题是完整实现甜甜圈缓存和部分缓存。在这方面,MVC3有一些改进,但仍不完整。无论如何,请关注:MVC团队似乎已经意识到这是他们应该努力解决的问题。

大的是控制。ASP.NET MVC不支持用户控件。我甚至已经尝试使用如下代码:

new Label().RenderControl(...ResponseStream...);

没戏。

当然,作为其中的一部分,没有必要视图状态,因此它不在其中。

服务器控件确实有效。

正如Marc所说,第三方工具和(服务器端)Web控件不能使用。因此,通过在表单上拖放一些控件(如网格和数据访问控件)快速地拼凑一些东西已不再是一个选择。

不过,有了代码生成等工具,你仍然可以快速制作出一些东西。如果你需要快速完成任务,你仍然可以选择上述选项。

我认为在MVC中,视图状态是不存在的。你将不得不以非MVC项目的内置视图状态以外的其它方式跟踪自己的视图状态。

EDIT: According to comments: "Getting rid of ViewState is an advantage not a disadvantage". – Craig

ASP.NET Ajax与ASP.NET MVC不兼容,因此没有UpdatePanel(由于缺乏postback)。幸运的是,内置了ajax(Ajax.Form),可以用来执行部分更新,更不用说jQuery了,它默认附带在Visual Studio项目模板中。





相关问题
热门标签