我需要帮助我最新的asp.net项目.它涉及图形.我需要绘制一个圆,并从中间到边缘(半径)有几条线.这是我知道该怎么做的部分.下一部分是我不知道该怎么做的部分,并希望得到一些建议.用户需要能够用鼠标抓住线并移动它们.例如,如果一条线指向90度标记,他们可能想抓住它并将其移动到45度标记.这将影响将在页面上其他位置显示的计算.
我将考虑第三方控件,但更喜欢使用编码或开源控件的解决方案.
提前致谢.
鲍勃阿瓦隆
在过去的几年里,我一直在使用命名约定,FirstNameTxt
当我指的是'First Name'字段的TextBox控件时.但是,我注意到大多数其他开发人员倾向于使用命名约定txtFirstName
哪个是最好的惯例?为什么它比其他方法更受欢迎?
所以,我不确定发生了什么.我的老板对我使用MVC和Razor不满意,所以我被迫使用这种令人讨厌的webcontrol/codebehind风格进行编码.= /
错误是:
Only Content controls are allowed directly in a content page that contains Content controls.
Run Code Online (Sandbox Code Playgroud)
这是主页:
<%@ Master Language="C#"%>
<!DOCTYPE html>
<html>
<head>
<title>Application Form</title>
</head>
<body>
<div id="container">
<asp:contentplaceholder id="contentPlaceHolder" runat="server" />
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是抛出错误的Default.aspx页面.
<%@ Page Language="C#" Inherits="dumb.Default" MasterPageFile="MasterPage.master" %>
<h2>Application Form</h2>
<asp:Content id="content" ContentPlaceHolderID="contentPlaceHolder" runat="server">
<p>Please complete this application.</p>
<form action="Default.aspx" method="post" runat="server">
<div>
<span class="spaced">Name:</span><asp:TextBox id="name" runat="server" />
</div>
</form>
<p>
<asp:Label id="finalmessage" runat="server" />
</p>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
愚蠢的Default.aspx.cs代码隐藏......
使用系统; 使用System.Web; 使用System.Web.UI;
namespace dumb …
Run Code Online (Sandbox Code Playgroud) 是的,我知道这个问题已被多次报道,但我的情况似乎不符合任何建议的解决方案(除非我错过了什么).
ASP.NET页面设置(简化)是:用户单击链接(技术上是Infragistics WebDataTree的节点),此操作绑定位于UpdatePanel中的网格(Infragistics WebHierarchicalDataGrid).
现在这在本地测试系统中工作正常.当部署到生产服务器时 - 它也可以工作 - 大多数时候,但有时会抛出错误:
无法加载viewstate.正在加载视图状态的控制树必须与在上一个请求期间用于保存视图状态的控制树匹配
如果生产系统负载较重(访问它的用户越多),这似乎就会发生.同样,我没有构建任何动态控件,只是按钮和按钮单击时填充的网格.
可能是什么导致了这个?为什么这不会永远发生,但有时呢?知道怎么解决吗?
UPDATE
这是确认的情景
一个会话如何影响另一个会话的视图状态?
更新2
应用程序部署到单个Windows 2008/IIS7服务器(没有Web场/ Web园,没有负载平衡器).在运行时期间不会推出更新.
如果单个用户访问它,但是当多个用户访问服务器时,应用程序工作正常 - 最终其中一些用户正在获取ViewState错误(而其他用户仍能正常工作).他们都在做同样的事情 - 点击触发UpdatePanel内部网格重新绑定的树节点.他们使用不同的浏览器 - IE(9-11),FF,Chrome - 错误可能发生在随机用户/浏览器上
哦,我们也没有加密ViewState.
更新3
堆栈跟踪:
System.Web.UI.Control.Load上的System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)中System.Web.UI.Control.LoadViewStateRecursive(Object savedState)处的System.Web.UI.Control.LoadViewStateRecursive(Object savedState) System.Web.UI.UI.Control.LoadViewStateRecursive中的.LoadChildViewStateByIndex(ArrayList childState)(系统中System.Web.UI.Control.LoadViewStateRecursive(Object savedState)的System.Web.UI.Control.LoadChildViewStateByID(ArrayList childState)中的Object savedState). System.Web.UI.Control.LoadViewStateRecursive处的System.Web.UI.UI.Control.LoadChildViewStateByIndex(ArrayList childState)中的System.Web.UI.Control.LoadViewStateRecursive(Object savedState)中的Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) System.Web上的System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)中的System.Web.UI.Control.LoadViewStateRecursive(Object savedState)处的System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState)处的Object savedState. UI.Control 系统.Web上的System.Web.UI.Page.LoadAllState()的System.Web.UI.Control.LoadViewStateRecursive(Object savedState)上的System.Web.UI.UI.Control.LoadChildViewStateByIndex(ArrayList childState)中的.LoadViewStateRecursive(Object savedState) .UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)
更新4
似乎如果我减少每次点击返回的数据大小(例如20行而不是100行),问题就会消失或者出现频率降低很多.
我已经尝试过操纵ViewState - 例如将其拆分为块,使用session作为ViewState存储来减少实际发布的页面大小 - 没有任何效果.
我对默认值属性有疑问。
当我在设计模式下将控件添加到页面时,默认值不起作用。这是我的代码:
[DefaultProperty("Text")]
[ToolboxData("<{0}:KHTLabel runat=server key=dfd></{0}:KHTLabel>")]
public class KHTLabel : Label ,IKHTBaseControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("KHT")]
[Localizable(true)]
public string Key
{
get
{
String s = (String)ViewState["Key"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Key"] = value;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{......
Run Code Online (Sandbox Code Playgroud)
但是,在设计模式下,当我从工具箱添加控件时,键不存在
<cc1:KHTLabel ID="KHTLabel1" runat="server"></cc1:KHTLabel>
Run Code Online (Sandbox Code Playgroud) 我正在使用空白文本文件来运行一些测试,并且很疯狂,因为 FileUpload1.HasFile 总是返回 false,即使它显然有一个文件。然后我将测试文件切换到 0 kb 以上的文件(即其中包含文本的 txt 文件),然后它就可以工作了。
据我所知,您不能上传 0 kb 的内容。这是真的? 我在 MSDN 上阅读了 FileUpload 类,但没有注意到任何说明 0 kb 的文件将被忽略/视为不是文件的内容。
实际上,我认为这不是什么大问题(你为什么要上传一个空白文件?),但我可以想象某种罕见的情况,我可能想要为某些东西保留空间还没有内容,比如一个空白的文本文件,供用户在他/她有时间的时候填写。
创建自定义WebControl
, UserControl
,Control
并且需要覆盖各种 Render 方法时,主要有两种方法来完成此操作:
又快又脏:
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write("<div class=\"{0}\"><a href={1}>{2}</a>", CssClass, "/someurl.aspx", LocalizedStrings.EditLinkText);
base.RenderControl(writer);
writer.Write("</div>");
}
Run Code Online (Sandbox Code Playgroud)
长而干净:
public override void RenderControl(HtmlTextWriter writer)
{
writer.WriteBeginTag(HtmlTextWriterTag.Div.ToString());
writer.WriteAttribute(HtmlTextWriterAttribute.Class.ToString(), CssClass);
writer.Write(HtmlTextWriter.TagRightChar);
var link = new HtmlAnchor();
link.HRef = "/someurl.aspx";
link.Title = LocalizedStrings.EditLinkTitle;
link.InnerText = LocalizedStrings.EditLinkText; ;
link.Attributes.Add(HtmlTextWriterAttribute.Class.ToString(), "someclass");
link.RenderControl(writer);
base.RenderControl(writer);
writer.WriteEndTag(HtmlTextWriterTag.Div.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我想知道第二种方法是否值得。
我需要在WebControl中输出一些JavaScript,这些JavaScript基于一些处理和消费者可以设置的一些属性,在页面的加载上执行它将是早期的.
什么是最新的我可以调用RegisterClientScriptBlock并仍然在页面输出?
在我的XHTML页面中: -
<asp:Button ID="bookNowButton" runat="server" CssClass="bookNowButton"
OnClientClick="showHideLoggedInDiv('<%=bookingFormDiv.ClientID%>')" />
Run Code Online (Sandbox Code Playgroud)
这打破了.我需要正确的语法或方法将bookingFormDiv.ClientID插入控件.
需要做什么?
我有以下使用的"代码用 "块上TableHeaderCell
,LiteralControl
,HyperLink
和GridViewRow
(try..finally
).代码是缩进的.使用"using"块处理控件时是否有任何问题/陷阱如下所示?如果是的话,你能提供任何显示陷阱细节的msdn参考吗?
protected void grdTransactions_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e != null)
{
if (e.Row.RowType == DataControlRowType.Header)
{
GridViewRow newHeaderRow = null;
try
{
newHeaderRow = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
using (TableHeaderCell cellFirst = new TableHeaderCell())
{
cellFirst.ColumnSpan = 1;
cellFirst.Text = "FIRST";
newHeaderRow.Cells.Add(cellFirst);
}
using (TableHeaderCell cellAssociate = new TableHeaderCell())
{
GetTableCell(cellAssociate,"tableColGroupAssociate", 4, "associateHide", "Associate Transaction Info");
newHeaderRow.Cells.Add(cellAssociate);
}
newHeaderRow.Cells.Add(cellAssociate);
((GridView)sender).Controls[0].Controls.AddAt(0, newHeaderRow);
}
finally
{
if …
Run Code Online (Sandbox Code Playgroud) asp.net ×10
web-controls ×10
c# ×6
vb.net ×2
.net ×1
clientid ×1
code-behind ×1
coding-style ×1
controls ×1
file-upload ×1
graphics ×1
infragistics ×1
javascript ×1
master-pages ×1
overriding ×1
viewstate ×1