我正在开发一个ASP.Net/AJAX控件包项目.80%的时间没有问题.页面应该运行.如果您刷新页面,它有时会显示一个javascript错误"系统未定义".
它不会一直发生,但它是可重复的.当它发生时,用户必须关闭他们的浏览器并重新打开页面.
这让我相信它可能是一个IIS设置.
另一个说明.当我收到错误时,我查看了页面源,何时没有.当页面抛出错误时,缺少以下代码:
<script src="/ScriptResource.axd?d=EAvfjPfYejDh0Z2Zq5zTR_TXqL0DgVcj_h1wz8cst6uXazNiprV1LnAGq3uL8N2vRbpXu46VsAMFGSgpfovx9_cO8tpy2so6Qm_0HXVGg_Y1&t=baeb8cc" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET网页,显示需要在特定条件,按钮点击等情况下最佳更新的各种字段.我们已经实现了AJAX,使用ASP.NET Update Panel来避免可见的回发.
最初只有一个区域需要这种能力......很快就会扩展到其他领域.现在我的网页有多个UpdatePanel.
我想知道是否最好将整个表单包装在单个UpdatePanel中,或者保留单个UpdatePanels.
使用ASP.NET UpdatePanel的最佳实践是什么?
似乎使用WCF的本机DataContractJsonSerializer或ASP.NET的本机JavaScript序列化程序无法将Entity Framework对象序列化为JSON.这是由于序列化器拒绝的引用计数问题.我也尝试过Json.NET,它也没有专门针对引用计数问题.
编辑: Json.NET现在可以序列化和反序列化实体框架实体.
我的对象是实体框架对象,它们被重载以执行其他业务功能(例如,身份验证等),我不想用平台特定的属性等来装饰这些类,因为我想呈现一个与平台无关的API .
我实际上曾在https://blog.programx.co.uk/2009/03/18/wcf-json-serialization-woes-and-a-solution/上写过关于我所经历的各个步骤的博客.
我错过了一些明显的事吗?
我有一个简单的表单创建使用Ajax.BeginForm:
<% using (Ajax.BeginForm("Update", "Description", new { id = Model.Id },
new AjaxOptions
{
UpdateTargetId = "DescriptionDiv",
HttpMethod = "post"
},new {id ='AjaxForm' })) {%>
Description:
<%= Html.TextBox("Description", Model.Description) %><br />
<input type="submit" value="save" />
<% }%>
Run Code Online (Sandbox Code Playgroud)
控制器已接线并返回更新的部分视图DescriptionDiv.这一切都很巧妙.
现在我希望能够在没有提交按钮的情况下提交此表单(通过链接或图像上的clik或其他任何内容).不幸的是,这个小jQuery片段不起作用:
$('form#AjaxForm').submit();
Run Code Online (Sandbox Code Playgroud)
它确实提交了表单,但确实(我想并不奇怪)是一个常规的回发而不是Ajax.
为简单起见,上面的jQuery是这样连接起来的:
<a href="#" onclick="$('form#AjaxForm').submit(); return false;">submit</a>
Run Code Online (Sandbox Code Playgroud)
表单的onsubmit使用的是Sys.Mvc.AsyncForm.handleSubmit(),但jQuery提交似乎绕过了这个.
PS.我正在寻找这种特殊方法的解决方案.我知道如何使用普通表单实现相同的功能并使用AJAX + jQuery发布它.我对这个特定的解决方案很感兴趣.
我有一个ASP.NET按钮,我需要在用户单击它后禁用它以防止双击.提交完成后,必须再次启用它.谁能帮我这个?
我在UpdatePanel中有一个Button.该按钮用作ModalPopupExtender的OK按钮.由于某种原因,按钮单击事件未触发.有任何想法吗?我错过了什么吗?
<asp:updatepanel id="UpdatePanel1" runat="server">
<ContentTemplate>
<cc1:ModalPopupExtender ID="ModalDialog" runat="server"
TargetControlID="OpenDialogLinkButton"
PopupControlID="ModalDialogPanel" OkControlID="ModalOKButton"
BackgroundCssClass="ModalBackground">
</cc1:ModalPopupExtender>
<asp:Panel ID="ModalDialogPanel" CssClass="ModalPopup" runat="server">
...
<asp:Button ID="ModalOKButton" runat="server" Text="OK"
onclick="ModalOKButton_Click" />
</asp:Panel>
</ContentTemplate>
</asp:updatepanel>
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释像这样的perse错误:来自程序集'System.Web.Extensions,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'的类型'System.Web.UI.ScriptManager'中的'方法'get_EnableCdn'没有实施."
我的开发盒运行Windows 7,框架4.0和最新的Ajax工具包.站点在本地以及测试服务器上运行(win 2003,framework 4.0和最新的Ajax工具包),但在生产服务器(同样是Win 2003)上,故事是不同的.
具有讽刺意味的是,生产服务器上的网站几个月前已经升级到框架4.0,并且在我尝试通过复制已发布的网站来推送更新之前一直正常工作.那是我收到这个错误的时候.
如果只是将站点的工作副本复制到新目录中创建新的虚拟目录,我也会收到此错误.
重新安装VS2010,但没有帮助.
无论如何,这个错误消息的很多帖子是关于用户升级到4.0并收到此错误,这不是我的情况,所以我对此感到茫然,并感谢您的输入.
谢谢,
在使用以下代码进行自动刷新时,我假设当我发布帖子时,模型会自动发送到控制器:
$.ajax({
url: '<%=Url.Action("ModelPage")%>',
type: "POST",
//data: ??????
success: function(result) {
$("div#updatePane").html(result);
},
complete: function() {
$('form').onsubmit({ preventDefault: function() { } });
}
});
Run Code Online (Sandbox Code Playgroud)
每次有帖子时,我都需要增加模型中的value属性:
public ActionResult Modelpage(MyModel model)
{
model.value = model.value + 1;
return PartialView("ModelPartialView", this.ViewData);
}
Run Code Online (Sandbox Code Playgroud)
但是当使用jQuery AJAX请求发布页面时,模型不会传递给控制器.如何在AJAX请求中发送模型?
我正在使用jQuery对一个ASP.NET页面进行ajax调用,该页面充当我的ajax服务器页面,用于保存我在查询字符串中发送给它的数据.在ASP.NET页面中,当我尝试读取查询字符串时,我收到此错误:
A potentially dangerous Request.QueryString value was detected from the client...
Run Code Online (Sandbox Code Playgroud)
我已经ValidateRequest="false"在我的页面中设置了 .不想为所有页面设置它.所以它在页面级别而不是配置级别:
var content = "<h3>Sample header</h3><p>sample para</p>"
content = encodeURIComponent(content);
var url = "../Lib/ajaxhandler.aspx?mode=savecontent&page=home<xt=" + content;
$.post(url, function (data) {
//check return value and do something
});
Run Code Online (Sandbox Code Playgroud)
在我的asp.net页面中:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajaxhandler.aspx.cs" ValidateRequest="false" Inherits="MyProject.Lib.ajaxhandler" %>
Run Code Online (Sandbox Code Playgroud)
但是当我发送纯文本而不是html标记时,它工作正常.
我在UpdatePanel中有一个GridView.在模板字段中是我用于标记项目的按钮.在功能上,这工作正常,但按钮总是触发整页回发而不是部分回发.如何让按钮触发部分回发?
<asp:ScriptManager ID="ContentScriptManager" runat="server" />
<asp:UpdatePanel ID="ContentUpdatePanel" runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:GridView ID="OrderGrid" runat="server" AllowPaging="false" AllowSorting="false"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="MarkAsCompleteButton" runat="server" Text="MarkAsComplete"
CommandName="MarkAsComplete" CommandArgument='<%# Eval("Id") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="LoadDate" HeaderText="Load Date" />
<asp:BoundField DataField="EmployeeCutOffDate" HeaderText="Cut Off Date" />
<asp:BoundField DataField="IsComplete" HeaderText="Is Completed" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud) asp.net-ajax ×10
asp.net ×6
jquery ×4
javascript ×3
asp.net-mvc ×2
updatepanel ×2
ajax ×1
c# ×1
gridview ×1
json ×1
security ×1
wcf ×1
webforms ×1