我计划开发一个 ASP.NET 服务器控件来为新用户注册提供异步用户名可用性验证。该控件将允许开发人员将其指向“用户名”文本框,并提供用户名是否可用的指示。像这个例子,但没有笨重的 UpdatePanel。
一个让我头疼的设计决策是是从ScriptControl还是BaseValidator继承。
通过将它实现为ScriptControl,我可以使客户端部分更容易处理并使用 resx 轻松本地化它。
但是,我想确保验证器在 Page.IsValid 方面正常运行。我知道这样做的唯一方法是覆盖BaseValidator并实现EvaluateIsValid().
所以,我的问题是,您建议如何构建此控件?从 BaseValidator 继承是使验证器部分正确的最佳(唯一)方法,还是我可以用其他方式做到这一点?
有谁知道在哪里可以找到ASP.NET MVC Framework Beta中使用的AJAX的在线文档?我似乎找不到它.我一直在寻找快速入门的一些信息和谷歌搜索,但似乎很难找到.
它现在似乎有点受限.人们是否使用它或与其他AJAX框架(如script.aculo.us)结合使用?
我有一个ASP.NET页面,它使用ASP.NET Ajax Control Toolkit TabContainer.在这种情况Page_Load下,我隐藏了一些基于给予页面的数据的选项卡.然后,我想根据(可选)查询字符串参数的值使其中一个选项卡处于活动状态.
所以我有:
protected void Page_Load ( object sender, EventArgs e )
{
if ( !this.IsPostBack )
{
// Tabs with no data are hidden in here
LoadDataIntoTabs();
PreselectCorrectTab();
}
}
private void PreselectCorrectTab ()
{
if ( ctlTabContainer.Visible )
{
if ( !string.IsNullOrEmpty( Request.QueryString[ "tabIndex" ] ) )
{
int tabIndex = 0;
if ( int.TryParse( Request.QueryString[ "tabIndex" ], out tabIndex ) )
{
if ( ( ctlTabContainer.Tabs.Count > tabIndex ) && …Run Code Online (Sandbox Code Playgroud) 我有一个包含各种控件的网页.其中两个是下拉列表.第一个下拉列表从page_load事件的xml文件中填充.这很好用.在第一个下拉列表中附加了一个级联下拉列表扩展器,每次更改第一个下拉列表中的选择时,都会调用Web服务.这也很好.在我的两个下拉列表下面,我有一个按钮,可以将页面发回.但是,当我在第二个下拉列表中进行选择并单击按钮时,我收到以下错误:
'/'应用程序中的服务器错误.无效的回发或回调参数.使用配置或页面中的<%@ Page EnableEventValidation ="true"%>启用事件验证.出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件.如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.ArgumentException:无效的回发或回调参数.使用配置或页面中的<%@ Page EnableEventValidation ="true"%>启用事件验证.出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件.如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证.
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[ArgumentException:无效的回发或回调参数.使用配置或页面中的<%@ Page EnableEventValidation ="true"%>启用事件验证.出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件.如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证.] System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId,String argument)+10945696 System.Web.UI .WebControls.DropDownList.LoadPostData(String postDataKey,NameValueCollection postCollection)+72 System.Web.UI.Page.ProcessPostData(NameValueCollection postData,Boolean fBeforeLoad)+507 System.Web.UI.Page.
抱歉可怕的格式化.有关为什么抛出此错误以及如何防止它的任何建议?
谢谢,
本
我有一个带有ScriptManager的页面,一个通用的HTML下拉列表(<select>)和一个UpdatePanel.UpdatePanel包含一个PlaceHolder(现在).在Page_Load期间,PlaceHolder中添加了许多用户控件(实际上,它是同一用户控件的几个实例).在页面加载之前,要添加的数字是未知的,因此需要动态加载它们.下拉列表中填充了相同数量的菜单项,并且页面上还有javascript(使用jQuery),一次只显示一个控件,具体取决于下拉列表的状态.
每个用户控件都有两个应该生成异步回发的按钮,一个应该在所选值的更改上生成异步回发的下拉列表,以及一个应该生成同步回发的按钮.如果我没有动态生成控件,并且如果只有一个控件,结构将类似于:
<asp:UpdatePanel ID="myUpdatePanel" runat="server" UpdateMode="Conditional"
ChildrenAsTriggers="false">
<ContentTemplate>
<asp:TextBox ID="textBox1" runat="server" />
<asp:TextBox ID="textBox2" runat="server" />
<asp:Button ID="asyncButton1" runat="server" Text="Button1"
onclick="asyncButton1_Click" />
<asp:DropDownList ID="asyncDropDown" ruant="server" AutoPostBack="true"
OnSelectedIndexChanged="asyncDropDown_SelectedIndexChanged" />
<asp:Button ID="asyncButton2" runat="server" Text="Button2"
OnClick="asyncButton2_Click" />
<asp:Button ID="syncButton" runat="server" Text="SyncButton"
OnClick="syncButton_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="asyncButton1" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="asyncButton2" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="asyncDropDown"
EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="syncButton" />
</Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
当然,ContentTemplate中的所有控件实际上都是每个用户控件的一部分.
在服务器端添加触发器似乎不起作用,因为没有ControlID似乎可以帮助UpdatePanel找到相关的控件.我可以使用控件的ID或控件的UniqueID,它不起作用,我得到一个错误的行
A control with ID 'ctl00$ContentPlaceHolder1$ctl01$asyncButton1' could not be
found for the trigger in UpdatePanel 'myUpdatePanel'.
Run Code Online (Sandbox Code Playgroud)
所以,我想知道是否需要在客户端注册触发器而不是使用ASP.NET Ajax.我发现 …
我有两个更新面板(让我们称之为A和B).在A中,我有一个简单的复选框.AutoPostback设置为true.当您检查(或取消选中)时,它将启用/禁用同一UpdatePanel中的简单下拉列表.
UpdatePanel B中有一个长时间运行的进程.它会触发创建下拉列表的请求,构建需要将近2分钟.如果我加载页面并且不接触任何内容,则在大约2分钟后构建下拉列表并完美呈现.但是,如果在那两分钟内我决定检查我的复选框(并导致面板A的部分回发),则更新面板B永远不会被渲染.在调试时,我发现它正在成功完成检索,但实际的面板永远不会刷新以显示控件.
我尝试在面板B上使用UpdateMode = Conditional(以确保它不会受到面板A的干扰)并且它产生相同的结果.我已经验证了B.Update()也被调用了.
编辑
小组A:
<asp:UpdatePanel ID="upMailScrub" runat="server">
<ContentTemplate>
<asp:Button ID="btnAnalyzeLaunch" runat="server" onclick="btnAnalyzeLaunch_Click" Text="Analyze Launch" style="display: none" />
<table>
<tr>
<td><asp:CheckBox ID="cbxScrub" runat="server" Checked="true"
oncheckedchanged="cbxScrub_CheckedChanged" AutoPostBack="True" /></td><td><label for="cbxScrub">Scrub this campaign</label></td>
<td style="padding-left: 10px">
Vendor: <asp:DropDownList ID="ddlScrubVendor" runat="server">
<asp:ListItem Text="LexisNexis" Value="LexisNexis" />
</asp:DropDownList>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
小组B:
<asp:UpdatePanel ID="upDdlCampaigns" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAnalyzeLaunch" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:HiddenField id="hidAction" runat="server" />
<asp:Panel ID="pnlPleaseWait" runat="server"><img src="style/images/PleaseWait.gif" /> Please wait while the Five9 Campaigns are retrieved...</asp:Panel>
<asp:DropDownList ID="ddlCampaigns" Visible="false" …Run Code Online (Sandbox Code Playgroud) 我在更新面板中有一个文本框.当用户键入内容时,我从数据库中获取相关数据并将其填入另一个文本框中.我的问题是,在autopostback之后,对任何文本框的关注都会丢失.我如何使用javascript或代码管理这个,因为我在我使用的代码中使用了两者
System.Web.UI.ScriptManager.GetCurrent(this).SetFocus(this.txtReference);
Run Code Online (Sandbox Code Playgroud)
和JavaScript我发现还有一个
<script type="text/javascript">
var postbackElement;
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest);
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);
function beginRequest(sender, args) {
postbackElement = args.get_postBackElement();
}
function pageLoaded(sender, args) {
var updatedPanels = args.get_panelsUpdated();
if (typeof (postbackElement) === "undefined") {
alert('if Loop');
return;
}
else if (postbackElement.id.toLowerCase().indexOf('button1') > -1) {
alert('else');
for (i = 0; i < updatedPanels.length; i++) {
document.getElementById('<%= txtAcctNo.ClientID %>').focus();
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
但没有工作,因为'button1 undefined'.我放在那里是因为所有事件都在aspx页面的OnTextChanged =""上执行.
所以请通过代码或javascript帮助我如何做到这一点.
我正在使用jquery-1.9.1.js和UI jquery-ui-1.10.3.custom.min.js.当我将鼠标悬停在任何表单元素上时,它会显示工具提示并在鼠标输出时消失.但我想在该项目的点击事件上消除该工具包,因为在我当前的场景中它显示了按钮的工具提示,即使在按钮点击后它仍然存在.因此它在页面上看到多个工具提示.我需要在点击后立即隐藏它们.(下面是屏幕截图).

我使用下面的代码,但不适合我
$(document).click(function() {
$(this).tooltip( "option", "hide", { effect: "explode", duration: 500 } );
});
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题帮助.
编辑
我正在使用更新面板.会产生问题吗?
在我的ASP.NET MVC 4视图中,以下内容不是调用控制器操作.Click事件会触发,因为我可以看到警报消息.但是当我在调试模式下对控制器动作设置断点时,应用程序无法达到这一点,当我在警报消息上单击"确定"时没有任何反应.我正在使用LINQ to SQL.类似的保存和插入控制器操作的调用工作正常:
$('#DeletePOC').click(function () {
if (confirm("This action will delete this POC record permanently. Click OK if you want to delete this record; otherwise, click 'Cancel'")) {
disableButton(['#CancelPOC', '#POC']);
$.ajax({
url: '@Url.Action("POCDelete")', type: "POST", dataType: "json",
data: {
SitePOCID: $('#POCId').val()
},
success: function (data) {
$('#POCStatus').html('<div class="success">POC Removed Successfully.</div>');
},
error: function () {
$('#POCStatus').html('<div class="field-validation-error">Some Error Occured in Removing POC.</div>');
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
控制器:我在调试期间测试过,app没有达到这个操作方法:
[HttpPost]
public ActionResult POCDelete(int id)
{
db.POC_dsp(id);
return Json("");
}
Run Code Online (Sandbox Code Playgroud) 我有一个HTML模板,它从控制器的数组中加载数据并将它们保存在表中.我还有一个指令,它可以对表行进行转换.数据数组正在填写API请求.在新请求之后,我已将请求结果合并到我的表中.正在为每个请求添加一组行,而不是清除以前的结果.
我已经调试了我的控制器代码来检查我的数组的状态,并在每次请求之前清除它.这是肯定的.然而,之前添加了新的结果.我认为原因可能出在我的移植指令模板中.
模板看起来像:
<div class="row">
<div class="col-md-12">
<div id="results" ng-show="results.length > 0">
<table class="table result-table">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="result in results" my-result></tr>
</tbody>
</table>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的transclusion指令的代码:
angular.module('app').directive('myResult',
['$compile',
function ($compile) {
return {
transclude: true,
templateUrl: '/Scripts/app/templates/resultTemplate.html',
compile: function (tElement, tAttr, transclude) {
var contents = tElement.contents().remove();
var compiledContents;
return function (scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents, transclude);
}
compiledContents(scope, function (clone, scope) {
iElement.replaceWith(clone);
});
}; …Run Code Online (Sandbox Code Playgroud) asp.net-ajax ×10
asp.net ×6
updatepanel ×4
ajax ×3
asp.net-mvc ×2
jquery ×2
.net ×1
angularjs ×1
asp.net-3.5 ×1
c# ×1
duplicates ×1
javascript ×1
jquery-ui ×1
linq-to-sql ×1
tabcontainer ×1
validation ×1