在ASP.NET 页面LifeCycle中有Page.LoadComplete事件.
MSDN文档说"将此事件用于需要加载页面上所有其他控件的任务".这到底是什么意思?"最佳实践"会说LoadComplete应该用于什么?
我正在寻找关于如何在ASP.NET MVC应用程序中使用Session的想法?特别是在使用masterpages和tryin只是将数据传输到母版页而不绕过控制器时.这个问题始于我提出了许多小问题,但后来我设法把它塑造成一个解决方案,但我还没有实现,但有一个方面是可行的.非常感谢任何反馈.
我建议的解决方案又名'我即将实施的内容,除非有人说停止!'
我有继承自ModelBase的模型类 - 它包含母版页所需的信息(每页只有一个视图),用于显示在标头或页脚中的某些内容以及基于登录者的配置驱动设置.
我的最佳解决方案如下所示 - 此处显示的是"产品页面":
假设:我在某些时候已经在会话中粘贴了某些数据 - 例如,可能是
partnerId
通过网关页面或currentLoggedInUserEmail
属性或完全爆炸的对象传入的数据.我有一个
ModelBase
类,每个模型都有 - 比如ProductModel
继承我有一个
MySiteControllerBase
类(继承自Controller) - 由子类化ProductController
.在我的动作方法中,
ProductController
我用产品视图创建模型'new ProductModel()'
.此模型类本身对会话或如何填充一无所知ModelBase
.它本质上甚ModelBase
至不知道- 它只是从它继承而来.我的链式构造函数什么都不做(因为我不想传递它Session
).我重写
View(...)
在MySiteControllerBase
为所有需要模型参数的重载.我检查该参数是否属于类型ModelBase
,如果是,我填充了诸如partnerid
和之类的属性currentLoggedInuserEmail
.幸运的是因为我在一个继承自我的类中Controller
可以直接访问,Session
所以我可以直接将它们拉出来.
这种方法意味着ModelBase
我只是自动填充属性'return View(model)'
.但是,如果模型ProductModel
需要访问任何定义的内容,则存在明显的问题ModelBase
.它将变为null,因为它尚未填充.
这个问题可以通过传入来解决,然后Session
将new ProductModel(session)
其传递给构造函数链new ModelBase(session)
.我真的不喜欢这个解决方案,但因为我喜欢将模型看作一个非常愚蠢的数据结构,根本不应该知道任何外部数据结构.另一个解决方案可能就是将它放在一边,如果我发现 …
来自ASP.NET(MVC之前)的任何人已经习惯于能够为他们的控件提供他们想要的任何ID.您可以创建一个Email
在.asmx
文件中调用的字段,Email
在主页面中调用的字段Email
,在母版页中调用的字段,在页面上放置.asmx
文件的多个实例,并且它们都将获得自己的唯一ID.
现在有很大的问题,这个已经全部被讨论过.建议的解决方案通常是" 切换到MVC ",您可以在其中控制您的ID.太棒了!......除了......
...你最终遇到的问题(切换到MVC后),如果你不小心,就像下面这样:
Email
ID 的电子邮件字段 .FORM
会将自己相应的内容发送到服务器操作.你可以逃脱 - 如果你是一个非常糟糕的程序员,不关心标准.但是,如果你开始使用jQuery甚至只是getElementById(..)
:你会很快看到一些非常奇怪的东西:
让我们说:
Email
字段.他们每个人都有id="Email"
你在'提交评论'控件中有javascript进行验证:
if ( $("#Email").val().indexOf("@") == -1 ) {
// invalid email
}
Run Code Online (Sandbox Code Playgroud)哎呀!该#Email
选择将选择的第一个实例<input id="Email">
在页面上.因此,在提交SECOND表单时,您最终可能会实际验证FIRST电子邮件字段的值.但检查数据库 - 您将拥有正确的值.这可以快速推动你的QA上升;-)
我正在寻找任何人都可能提出的任何聪明的伎俩.我在这个问题中找到了一些有趣的想法:ASP.NET MVC View User Control - 如何设置ID,但我觉得答案不够,或者利用了一些最新的绑定模型.
您可以做一些显而易见的事情,例如始终使用唯一IDS,为每个ID添加前缀或控件前缀.这很快就开始看起来像ASP.NET 1.0!
您可以做的另一件事是使用选择器$('#contatUsForm #Email')
来获取电子邮件ID.但是,只有你没有XHTML才好.我认为这个解决方案非常糟糕.事实上它是如此糟糕我甚至没有测试,看看jQuery甚至让你运行它!
有没有人编写过一个工具来对ASP.NET MVC应用程序进行静态分析?
免责声明:我不确定我想要的是静态分析 - 它只是我能想到的最接近的术语.
我想要的是获得所有控制器的列表,我的行为,显示他们是否响应GET或POST,他们的缓存设置是什么等.
我相信你可以继续这样做 - 并继续讨论更高级的问题,比如每个行动是否实际上都可以通过一条路线进入.
如果没有人这样做 - 人们认为它会有用吗?还有什么应该做的?
IE8有一个名为InPrivate Filtering的功能,它将阻止它在超过'n'个不同站点的网页上找到的脚本.
我正在收听最新的" 立即安全"播客,该播客对此功能赞不绝口.
在同一时间我正在尖叫NOOO!什么是*#&$ - 因为我的网站(和许多其他网站一样)包括以下内容(jQuery + SWFObject).即我正在使用谷歌的CDN来托管我的jQuery.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"></script>
Run Code Online (Sandbox Code Playgroud)
那么这笔交易是什么 - 我应该停止使用来自CDN的jQuery和swfobject吗?
别人在做什么?
**编辑:**我无法确定他们是否保留了"受信任的站点"列表,但根据Microsoft的这一点,InPrivate过滤是每个会话.所以至少有人必须在每个会话中主动启用它.
InPrivate Filtering默认情况下处于关闭状态,必须基于每个会话启用.要使用此功能,请从"安全"菜单中选择"InPrivate Filtering".要访问和管理Internet Explorer 8的不同筛选选项,请从"安全"菜单中选择"InPrivate筛选设置".要结束InPrivate浏览会话,只需关闭浏览器窗口即可.
该属性HttpContext.Current.Request.ApplicationPath
表示IIS或WebDev.WebServer中的虚拟目录.
HttpContext.Current.Request.ApplicationPath evaluates to "/virtualdirectory"
Run Code Online (Sandbox Code Playgroud)
这可以与VirtualPathUtility
路径根相关联使用:
VirtualPathUtility.ToAbsolute("~/images/cat.jpg",
HttpContext.Current.Request.ApplicationPath)
// (this evaluates to "/virtualdirectory/images/cat.jpg")
Run Code Online (Sandbox Code Playgroud)
在IIS6和WebDev.WebServer Request对象是可用global.asax.cs
的,但IIS7抱怨说,它是"在目前情况下不可用".因此上面的第二行代码可以工作,但不能在IIS7中工作.
问题是我需要访问其中的虚拟directroy名称global.asax.cs
.我需要它来构建一些在动态创建的CSS中使用的路径.有没有其他方法可以访问此值?
编辑:这是您在IIS 7中调用HttpContext.Current.Request
Application_Start下的global.asax.cs时出现的错误:
HttpException (0x80004005): Request is not available in this context]
System.Web.HttpContext.get_Request() +8789264
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Paypal PayFlow之间为交易处理服务或像BrainTree这样的服务做出决定.
BrainTree的服务引起了我的兴趣,因为他们实际上会向您返回一张信用卡,可以在未来的交易中使用.此令牌的作用类似于信用卡的GUID,但如果被盗则无效.BrainTree是我遇到的唯一使用这种系统的服务 - 但我不确定它们是否是唯一的.
我最近播客时听到了BrainTree的一些赞誉,之前没有听说过.
我想知道是否有人对两者之间的选择有任何一般性建议 - 从我需要做多少编程或PCI问题的角度来看.
data-bind="style : { display : repeat() === 'Custom' ? 'block' : 'none' }"
Run Code Online (Sandbox Code Playgroud)
这种样式绑定成功使用knockout,因为以下失败
data-bind="style : { visibility : repeat() === 'Custom' ? 'visible' : 'hidden' }"
Run Code Online (Sandbox Code Playgroud)
为什么?
我可以使用可见的绑定,但在我的情况下,即使它被隐藏,我也不想丢失div空间.
我怎样才能做到这一点?
我不想使用jquery来实现这一点,因为我已经成功使用它.
我一直在使用Google API Client Library for .NET将Google Analytics数据加载到我的应用程序中:
最近虽然我发现它已经开始完全冻结.该Execute()
命令与Google服务器建立连接.
它成功地要求:
https://accounts.google.com/o/oauth2/token
Run Code Online (Sandbox Code Playgroud)
返回类似于:
{
"access_token" : "ya30.HAKlQSGZo2GnK5wxlxx9TLTQUyD9Xkt7AZxuQnDY-KhJuCyrCtN_xHIP",
"token_type" : "Bearer",
"expires_in" : 3600
}
Run Code Online (Sandbox Code Playgroud)
但是从来没有从Execute
电话中回来.
控制台应用程序中的相同代码立即返回,但在IIS中它当前永远不会返回.
在以前的版本中它工作得很好(我不确定它改变了哪个版本).
我已经Load User Profile
设定为真.
可能是什么导致了这个?
var SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"C:\TEMP\GoogleAnalytics-privatekey.p12";
X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
// Create credentials (not my real login here)
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer("86987278011-ctegcus4og7kn6oigkrv8po5pf67bbgj@developer.gserviceaccount.com")
{
Scopes = new[] { AnalyticsService.Scope.AnalyticsReadonly }
}.FromCertificate(certificate));
// Create the service
var …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc oauth google-api google-analytics-api google-api-dotnet-client
如果从BundleTransformer的版本1升级到版本2,您可能会收到以下消息:
找不到工厂,它用名称创建JavaScript引擎的实例
MsieJsEngine
.
像我一样,你可能甚至没有意识到你升级的不仅仅是一个点发布.
怎么修?
asp.net-mvc ×4
asp.net ×3
jquery ×2
braintree ×1
cdn ×1
credit-card ×1
css ×1
google-api ×1
javascript ×1
knockout.js ×1
master-pages ×1
oauth ×1
session ×1
visibility ×1