我想使用Visual Studio 2012 For Web创建一个网站,该网站有一个数据库和一个生成的UI,就像我们使用模板项目时那样:
动态数据实体Web应用程序
但我也想有一个登录页面,如模板项目提供的:
Asp.Net Web窗体应用程序
我发现这些模板对这两项任务都很好,但如果你同时想要这两项,它们就很糟糕了。
如果我从动态数据实体Web应用程序模板开始,那么我可以在数据库端获得很好的页面,只需很少的编码,但我无法使登录代码正常工作(此外,我认为我无论如何都不应该编写该代码,因为它已经存在于Asp.Net Web窗体应用程序中)。每当我尝试的时候,我都会陷入可怕的混乱。我真的不想了解身份验证、会员资格和cookie,也不想了解"它是如何做到的"或诸如此类的东西。我想要的是让.Net框架处理所有这些,并告诉我查看页面的人的用户名是什么。仅此而已。有一种方法可以做到这一点,那就是使用Asp.NetWebForms应用程序模板。
但是,如果我从Asp.NetWebForms应用程序模板开始,那么登录的东西就开箱即用了。。。但后来我在试图为数据库创建UI时陷入了可怕的混乱!但是,考虑到该代码已经存在于动态数据实体Web应用程序模板中,这应该不是必要的。再说一遍,我真的不想学习它是如何做到的,我只想用它来为我做一些事情,这样我就不必这么做了。我不想告诉它如何更新、删除等等……我也不必使用动态数据实体Web应用程序模板,但我无法获得登录信息。
无论如何,我已经用一项我认为非常简单的任务把我的大部分头发都扯掉了:使用代码优先实体的方法,用一个简单的数据库创建一个登录/注册的网站。我的经验是,如果你想有一个数据库,但没有登录,那么你就是在笑。如果你想登录但没有数据库用户界面,那么你就是在笑。如果你想两者兼得,那么前方会有很多痛苦,除非你是一个生活和呼吸这些东西的超级傻瓜微软技术专家。。或者你知道"窍门"(可能存在于某个论坛中)。
不管怎样,我的问题是,我在这里错过了什么?是否有一个网站包含一大堆其他模板,其中的模板将Web表单(具有自动登录/会员控制)与动态数据实体Web应用程序相结合,该应用程序在显示表格和允许编辑方面做得很好?我发现很难相信微软打算让我知道如何做动态数据实体Web应用程序和Asp.Net Web窗体应用程序所做的所有事情,以便获得这两种功能。
我花了一周时间才弄清楚如何让"启用迁移"在Web窗体模板类型中工作。。。基本上,每一小步都是一场巨大的战斗,需要阅读一个又一个论坛才能发现一些小"窍门"。但最终,我真正想要的只是一个模板,它将动态数据实体Web应用程序功能(即数据驱动的网页)与Web表单功能(即用户登录)相结合,并将其发布在Azure上。我觉得这很简单。但事实证明这是一场噩梦,事实上我完全陷入了困境。
更新:
我刚刚又花了半天时间,按照关于http://msdn.microsoft.com/en-us/library/ee923692(v=vs.100).aspx。但它对我不起作用。它不应该这么复杂。制作这样一个通用的网站格式:一个带有用户界面和登录名的数据库,不应该需要那么大的修改。
现在我又回到了几天前遇到的第一个问题,它不知怎么就消失了,但我不知道是怎么回事:
PM>启用迁移System.ArgumentException:参数不正确。(HRESULT异常:0x80070057(E_INVALIDARG))
服务器堆栈跟踪:位于EnvDTE.Properties.Item(对象索引)在System.Runtime.Remoting.Messageing.StackBuilderSink._PrivateProcessMessage(IntPtr md,Object[]args,Object server,Object[]&outArgs)在System.Runtime.Remoting.Messageing.StackBuilderSink.SyncProcessMessage(IMessage消息)
在[0]处重新引发异常:在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage-reqMsg,IMessage-retMsg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)位于EnvDTE.Properties.Item(对象索引)位于System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetPropertyValue[T](项目项目,字符串属性名称)位于System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(字符串配置类型名称)位于System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(StringcontextTypeName)位于System.Data.Entity.Migrations.EnableMigrationsCommand。<>c_显示类2.<。ctor>b_0()位于System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)参数不正确。(HRESULT异常:0x80070057(E_INVALIDARG))
在这一点上,我将放弃。我不得不放弃,因为经过一周的尝试,我可以在Azure上创建一个有数据库和UI但没有登录的网站或一个有登录但没有数据库UI的Azure网站。对于我来说,为我的每一个表创建一个网格视图,并手动连接RowChange、UpdateMethod、DeleteMethod等(即不使用动态数据脚手架)将是荒谬的,因为脚手架是存在的(除非我从一开始就使用该模板,否则很难让它工作,但如果我使用该模板的话,我就没有登录页面!)。无论如何,现在这个"参数不正确"的错误再次出现,所以我在兜圈子。
您可以使用ASP.NET动态数据模板在Visual Studio中创建动态数据网站
在继续之前,您必须决定是要创建网站项目还是Web应用程序项目。有关详细信息,请参见Web应用程序项目与网站项目。按照相应程序中的步骤进行操作。创建使用脚手架的动态数据Web应用程序所遵循的大多数步骤对于网站项目和Web应用程序项目都是相同的。但是,根据使用的项目类型,有几个步骤会有所不同
创建动态数据网站项目
- 启动Visual Studio或Visual Web Developer
- 在文件菜单中,单击新建网站。将显示新建网站对话框
- 在Installed Templates下的左侧窗格中,选择Visual Basic或VisualC#
- 在中央窗格中,选择以下选项之一:
若要使用LINQ To SQL模型,请选择ASP.NET Dynamic Data LINQ To SQL网站
-若要使用ADO.NET实体框架模型,请选择ASP.NET动态数据实体网站
有关详细信息,请参阅ASP.NET动态数据层自定义
5.在Web位置框中,选择文件系统,然后输入名称要保存网站页面的文件夹的
例如,输入文件夹名称C:\WebSites\DynamicData
6.单击确定。
参考:创建动态网站
除此之外,你还可以从中阅读其他信息。我相信没有什么是编程不重要的。如果你能想到,我相信你也能做到