क्या कोई यह बता सकता है कि सर्वर.एक्सक्यूट() को मेरे प्रस्तुत किए गए UserControls को <form>
टैग (या वैकल्पिक रूप से, मैं सर्वर को बना रहा हूं जो गलत कर रहा हूं) की आवश्यकता है। निष्पादित करें() को मेरे UserControls में फॉर्म टैग की आवश्यकता है)?एएसएमएक्स वेब सेवा में सर्वर.एक्सक्यूट() का उपयोग कर UserControl को प्रस्तुत करने वाले मुद्दे
इस प्रकार मैं एक ASMX सेवा गतिशील JQuery + JSON के माध्यम से UserControls लोड करने के लिए बनाया है:
ControlService.asmx
<%@ WebService Language="C#" CodeBehind="ControlService.asmx.cs" Class="ManagementConcepts.WebServices.ControlService" %>
ControlService.cs
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class ControlService : System.Web.Services.WebService
{
private string GetControl(String controlName, String ClassId)
{
Page page = new Page();
UserControl ctl = (UserControl)page.LoadControl(controlName);
page.Controls.Add(ctl);
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetSimpleControl(string ClassId)
{
return GetControl("SimpleControl.ascx", ClassId);
}
}
मैं में नियंत्रण लोड JQuery के निम्न बिट के माध्यम से एक पृष्ठ जो आईडी सामग्री प्लेसहोल्डर के साथ एचटीएमएल के साथ सेवा से लौटाता है:
JQueryControlLoadExample.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JQueryControlLoadExample.aspx.cs" Inherits="ControlService_Prototype._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ControlService Prototype</title>
</head>
<body>
<form id="theForm" runat="server" action="JQueryControlLoadExample.aspx">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" >
<Scripts>
<asp:ScriptReference NotifyScriptLoaded="true" Path="~/Scripts/jquery-1.3.2.js" />
</Scripts>
</asp:ScriptManager>
<div>
<asp:HiddenField runat="server" ID="hdncourse"/>
<asp:HiddenField runat="server" ID="hdnTargetContent" Value="GetSimpleControl"/>
<div runat="server" id="ContentPlaceholder" class="loading"></div>
</div>
<script type="text/javascript">
$(document).ready(function() {
var servicemethod = document.getElementById("hdnTargetContent").value;
$.ajax({
type: "POST",
url: "ControlService.asmx/" + servicemethod,
data: "{'ClassId':'"+document.getElementById("hdncourse").value+"'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#ContentPlaceholder').html(msg.d);
}
});
});
</script>
</form>
</body>
</html>
यह एक बहुत बड़ा चेतावनी के साथ काम करता है।
Control 'hdnspecialoffer' of type 'HiddenField' must be placed inside a form tag with runat=server.
SimpleControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SimpleControl.ascx.cs" Inherits="ControlService_Prototype.UserControls.SimpleControl" %>
<asp:HiddenField runat="server" ID="hdnspecialoffer"/>
: मैं .ascx नियंत्रण के मार्कअप में एक प्रपत्र को परिभाषित नहीं है, तो HttpContext.Current.Server.Execute() निम्न संदेश के साथ एक HttpException फेंकता
जब मैंने इस के आसपास काम करने के लिए एसीएक्स नियंत्रण में एक फॉर्म टैग जोड़ा, तो फॉर्म प्रस्तुत करेगा, लेकिन रेंडरर नियंत्रण में फॉर्म टैग को फिर से लिखता है ताकि वह एएसपीएक्स पेज में परिभाषित फॉर्म के बजाय एएसएमएक्स सेवा पर वापस पोस्ट कर सके।
मैंने चारों ओर गुगल किया और स्कॉट गुथरी के उत्कृष्ट ViewManager उदाहरण की खोज की। मैं वहां जो कुछ भी करता था उससे मूल रूप से अलग नहीं दिखता, जिससे मुझे विश्वास होता है कि मैं जो कर रहा हूं वह काम करना चाहिए।
मैं इस जवाब को स्वीकार करने की ओर झुका रहा हूं, क्योंकि यह सच है, लेकिन मैं इसे पहले देखना चाहता हूं (जो कुछ दिनों के लिए नहीं होगा)। –