我有一个主页(“基本页面”),该页面对服务器进行了ajax调用(使用jQuery)。服务器端页面(“ Ajax页面”)是ASP.NET Web表单(此处未使用MVC)。因为(在这种情况下)我正在使用GridView在ajax响应中呈现数据,所以必须包含标记。
我的抱怨是,当基本页面收到AJAX响应时,它将其插入DOM中,但是由于AJAX响应由包含标记的HTML标记组成,因此有时会导致嵌套的html表单,坏。
我意识到我可以使用jquery仅将响应的一部分插入到Base Page DOM中,或者我可以使用jquery随后去除有问题的标记。但是这些感觉就像是笨拙的解决方法。真的有没有办法防止ASP.NET页使用标签提供其响应?我意识到表单标记是ASP.NET Webform模型的核心,但是它确实使在ASP.NET中使用AJAX成为一件复杂的事情-上游很多。微软肯定已经意识到回发/服务器端模型已经成为过去了吗?
我也意识到微软有一些服务器端AJAX库可能解决了这个问题-但我仍然想知道是否存在ASP.NET Webforms固有的解决方案。
有什么建议?
最佳答案
您可以将GridView添加到Web用户控件,然后将其呈现为这样的字符串:
public static string ExecuteToString(this Control control)
{
Page page = new Page();
page.Controls.Add(control);
StringBuilder sb = new StringBuilder();
using (StringWriter writer = new StringWriter(sb))
{
HttpContext.Current.Server.Execute(page, writer, false);
}
return sb.ToString();
}
这意味着您无需将ajax请求指向页面。您可以使用Web服务。查询特定方法,然后动态加载用户控件,将其呈现为字符串并返回HTML。因为您将HTML和代码放在用户控件中,所以您不必担心会剥离表单标签,并且仍然可以像在页面上一样使用所有asp控件。
我不知道使用这种方法的性能成本,但是我已经使用了一段时间,对我来说似乎还不错。
关于asp.net - ASP.NET和Ajax响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10232262/