我遇到以下代码的问题,但我不确定问题出在哪里.
在我的母版页上,在javascript中,我有一个数组,用于保存YouTubePlayer我创建的对象列表.我还在这里加载了YouTube API.
我还有(有时几个)YouTube用户控件,其中包含引导模式中的YouTube div.它还包含一个JavaScript,用于将新YouTubePlayer对象推送到母版页js中的数组.最后,在用户控件上,我定义了在bootstrap模式的"显示"和"隐藏"事件上自动启动和停止视频的方法.
最后,为了(希望)解决正在加载的文档和正在加载的YouTube API之间的竞争条件,我设置了两个bool变量(一个用于文档,一个用于API),并在调用initVideos函数之前检查两者是否为true,迭代通过YouTubePlayer对象数组并初始化它们,YT.Player在窗口中设置对象.我认为,部分问题是我无法静态设置window.player1等,因为我从来不知道将加载多少YouTube用户控件.
问题是,每当引导模式的事件发生火灾,YT.Player我从窗口检索对象不包含方法playVideo()和pauseVideo().
在我的母版页面上:
$(document).ready(function () {
window.docReady = true;
if (window.apiReady)
initVideos();
});
function onYouTubeIframeAPIReady() {
window.apiReady = true;
if (window.docReady)
initVideos();
initVideos();
}
function initVideos() {
if (typeof ytPlayerList === 'undefined')
return;
for (var i = 0; i < ytPlayerList.length; i++) {
var player = ytPlayerList[i];
var pl = new YT.Player(player.DivId, {
playerVars: {
'autoplay': '0',
'controls': …Run Code Online (Sandbox Code Playgroud) 我知道,我知道,我知道.我不应该在MVC中做webforms,我完全同意.但是,签署我的薪水的人不会批准我们的网站现在完全转换为MVC.因此,我逐页采取增量步骤,在MVC中添加新功能时将其转换.
所以我的问题是如何从控制器访问IsPostBack属性?
编辑: 为了进一步澄清,我在我的mvc母版页面上有一个webform用户控件,可以启动回发.我试图通过mvc帖子识别这些回发.在这一点上,我想我只是检查请求表单键的"__viewstate"键,如果它被发现将其视为回发.
首先有一些问题(DropDownList有一个无效的SelectedValue,因为它不存在于项目列表中,DropDownList"有一个无效的SelectedValue,因为它不存在于项目列表中",asp:DropDownList错误:'DropDownList1'有一个SelectedValue,它是无效的,因为它不存在于项目列表中)关于这一点,并提出了解决办法,但我的问题是为什么会发生这种情况.更重要的是我对建议的解决方法不满意,我发现它们非常难看.
所以有一个页面有一个下拉列表和一个按钮:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="TestWebApplication.WebForm2" ViewStateMode="Disabled" %>
<html lang="en" >
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlTest" runat="server">
</asp:DropDownList>
<asp:Button Text="Test" ID="btnTest" runat="server" onclick="btnTest_Click" />
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我将ddlTest与Page_Init上的一些项绑定,然后在btnTest_Click中再次绑定:
using System;
namespace TestWebApplication
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
//SelectedIndex is -1, SelectedValue is "", SelectedItem is null
ddlTest.DataSource = new[] { 1, 2, 3 };
ddlTest.DataBind();
ddlTest.SelectedValue = "3";
} …Run Code Online (Sandbox Code Playgroud) 所以我有一个遗留的webforms网站,正在努力使其更容易维护.把它拿走并重写它不是一种选择.
IoC显然是它最先得到的东西之一,但是这给我留下了服务定位器模式和糟糕的味道,并且想知道它是否可以做得更好.
我在网上聊过的各种人告诉我,我可以使用HttpModule进行属性注入,该HttpModule扫描一个Page类,用于使用Inject属性或类似物修饰的属性,但这听起来像一个Reflection命中(缓存,但仍然)在每个请求.不吸引人.
所以我正在寻找其他选项,并遇到了System.Web.IHttpHandlerFactory,它自v2以来一直在框架中.可以在httpHandlers web.config部分中删除默认的*.aspx处理程序并将其替换为使用自定义实现的处理程序.
所以,我与之交谈的人并不愚蠢; 我以为我会在这里问. 使用基于IoC的实现替换webforms PageHandlerFactory是否有任何问题?
看起来它同时具有CreateHandler和ReleaseHandler方法,因此从容器中保留对生成组件的引用的生活方式相关内存泄漏应该不是问题...
我知道这可以用mvc2完成,但是有没有办法让visual studio(2010)/ resharper(6)在编译时检查aspx页面上的错误并停止构建?Resharper可以很好地检测错误,因此似乎应该有一种方法将所有aspx页面的检查集成到构建过程中.
有小费吗?
我正在尝试实现一个使用WebForm ascx用户控件(非MVC)的MVC Razor _Layout.cshtml页面.我这是根据Scott Hansleman的文章"使用ASP.NET MVC 3混合Razor视图和WebForms母版页"的"是"部分进行的.http ://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx
文章说明如何在webform Site.Master页面以及MVC Razor _Layout页面中使用相同的ascx用户控件.
从我在Stackoverflow上的其他地方读到的内容,可以在MVC页面中使用传统的ascx用户控件(以及ASP.NET webform服务器控件).使用以下行应该在我的Razor _Layout中呈现ascx用户控件:
@{ Html.RenderPartial("~/UserControls/WebUserControl1.ascx"); }
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误:
The view at '~/UserControls/WebUserControl1.ascx' must derive from ViewPage,
ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.
Run Code Online (Sandbox Code Playgroud)
我也试过以下类似的结果:
@Html.Partial("~/UserControls/WebUserControl1.ascx")
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我们有一个使用本机表单身份验证和会话功能的ASP.NET 4.5 WebForms应用程序.滑动到期时两者都超时20分钟.
想象一下以下场景.用户已经在我们的应用程序中工作了一段时间,然后继续做其他事情,让我们的应用程序闲置20分钟.然后,用户返回到我们的应用程序以编写报告.但是,当用户尝试保存时,他/她将使用登录屏幕进行处理,并且报告将丢失.
显然,这是不需要的.我们希望在身份验证或会话过期时将浏览器重定向到登录页面,而不是这种情况.为了实现这一点,我们构建了一个Web Api服务,可以调用它来检查是否是这种情况.
public class SessionIsActiveController : ApiController
{
/// <summary>
/// Gets a value defining whether the session that belongs with the current HTTP request is still active or not.
/// </summary>
/// <returns>True if the session, that belongs with the current HTTP request, is still active; false, otherwise./returns>
public bool GetSessionIsActive()
{
CookieHeaderValue cookies = Request.Headers.GetCookies().FirstOrDefault();
if (cookies != null && cookies["authTicket"] != null && !string.IsNullOrEmpty(cookies["authTicket"].Value) && cookies["sessionId"] != null && !string.IsNullOrEmpty(cookies["sessionId"].Value))
{
var authenticationTicket …Run Code Online (Sandbox Code Playgroud) 我正在使用.NET 4.5构建ASP.NET Web Forms网站.
错误 ...
The type 'System.ComponentModel.DataAnnotations.Schema.ForeignKeyAttribute' exists in both 'f:\Projects\web sites\RC1Iteration05\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll' and 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll'
Run Code Online (Sandbox Code Playgroud)
我试图使用...来对库进行别名...
csc /r:EF_DataAnnotations="f:\Projects\web sites\RC1Iteration05\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll" /r:CM_DataAnnotations="c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll"
Run Code Online (Sandbox Code Playgroud)
但这只会导致"无源文件指定"同样令人困惑,因为源文件被指定为指示(此处和此处).
我注意到该错误引用了net40文件夹中的EF dll而不是net45文件夹.我想如果我使用net45版本问题会自行解决,但我不知道如何更改该引用.我将"targetFramework"属性更改为packages.config文件中的EntityFramework包,但这没有任何区别.
我有点卡住,因为这两种解决方案似乎都没有做任何事情.
我环顾四周,在这里发现了一些帖子,人们处理了类似的问题,但没有收到回应.我希望有人可以提供帮助!
谢谢
G
我在C#Web Forms应用程序中使用Razor Helpers .
以下代码在调用时编译并呈现A-OK:
@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
<li>
@firstname @lastname
@avatarUrl
</li>
}
Run Code Online (Sandbox Code Playgroud)
输出(两次调用助手):
<li>Bryan Arnold ../../Resources/Images/Placeholders/generic-user-image.jpg</li>
<li>Doug Bland ../../Resources/Images/Placeholders/generic-user-image.jpg</li>
Run Code Online (Sandbox Code Playgroud)
但是,当我改变助手,以便avatarUrl被放置在src一个属性img标签,我得到一个NullReferenceException上firstname.是的,NullReferenceException是的firstname.
以下代码编译但在调用时抛出NRE:
@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
<li>
@firstname @lastname
<img src="@avatarUrl"/>
</li>
}
Run Code Online (Sandbox Code Playgroud)
请记住,除了帮助程序中的位置之外,我不会更改任何内容@avatarUrl.
如何显示图像?
更新1:
我也试过包装我的img代码<text></text>(无济于事):
<li>
@firstname @lastname
<text>
<img src="@avatarUrl"/>
</text>
</li>
Run Code Online (Sandbox Code Playgroud)
更新2: 这是错误:
Object …Run Code Online (Sandbox Code Playgroud) 有没有办法将代码中的Dictionary转换为url参数字符串?
例如
// An example list of parameters
Dictionary<string, object> parameters ...;
foreach (Item in List)
{
parameters.Add(Item.Name, Item.Value);
}
string url = "http://www.somesite.com?" + parameters.XX.ToString();
Run Code Online (Sandbox Code Playgroud)
在MVC HtmlHelpers内部,您可以使用UrlHelper(或控制器中的Url)生成URL,但在Web窗体代码隐藏中,此HtmlHelper不可用.
string url = UrlHelper.GenerateUrl("Default", "Action", "Controller",
new RouteValueDictionary(parameters), htmlHelper.RouteCollection ,
htmlHelper.ViewContext.RequestContext, true);
Run Code Online (Sandbox Code Playgroud)
如果没有MVC助手,如何在C#Web窗体代码隐藏(在MVC/Web窗体应用程序中)中完成?
webforms ×10
asp.net ×5
c# ×4
asp.net-mvc ×3
ascx ×1
asp.net-4.5 ×1
dictionary ×1
javascript ×1
razor ×1
razor-2 ×1
resharper ×1
session ×1
youtube-api ×1