Frage

Ich bin mit einem Server-Steuerelement auf einer einzigen Seite web.forms. Ich habe dieses Steuerelement auf einer Seite web.forms seit seinem einem Server-Steuerelement verwenden, obwohl dies eigentlich ein MVC-Projekt ist. Also habe ich ein web.forms erstellt Ordner und darin meine neue Seite setzen. Ich kopiere dann den Beispielcode aus der Signatur Kontrolle. Ich erhalte die folgende Fehlermeldung:

The base class includes the field 'ctrlSign', but its type (WebSignatureCapture.SignatureControl) is not compatible with the type of control (ASP.signaturecapture_signaturecontrol_ctlsignature_ascx).

ich weiß, den Code funktioniert, denn wenn ich das ID-Attribut aus dem Server-Steuerelement entfernt, es nicht mehr gibt mir diesen Fehler und meine Kontrolle macht. Aber ich brauche das Attribut für die ID, also kann ich ausführen soll nach einem Ereignis ... Irgendwelche Ideen, warum?

Ich bin mit dieser Signaturkontrolle. Hier ist der web.forms Code ...

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="KahunaCentralTIDRevamp.SignatureCapture.Index" %>

<%@ Reference Control="~/SignatureCapture/SignatureControl/ctlSignature.ascx" %>
<%@ Register TagPrefix="uc" TagName="Signature" Src="~/SignatureCapture/SignatureControl/ctlSignature.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
    <title>Signature Application Demo</title>
</head>
<body>

    <form id="frmOrder" method="post" runat="server">
    <div>
        Please Sign Below:
    </div>
    <div>
        <uc:Signature ID="ctrlSign" SignHeight="150" SignWidth="300" SignatureCodePath="~/SignatureCapture/SignatureControl/"
            SavePath="~/SignatureCapture/" SignatureFileFormat="Gif" runat="server" />
        <%--    <uc:Signature id="ctlMySignature" PenColor="Red" PenWidth="2" BackColor="Yellow" SignWidth="300" SignHeight="150"
                            SavePath="~/Signatures/" SignatureCodePath="~/SignatureControl/" SignatureFileFormat="Gif" Runat="server"></uc:Signature>--%>
    </div>
    <div>
        <input type="button" value="  Re-Sign " onclick="ClearSignature();">
        <asp:Button runat="server" ID="btnSave" Text=" Save " onmousedown="document.getElementById('btnSave').value = 'Wait...';"
            OnClientClick="DirectSave();" OnClick="btnSave_Click" />
    </div>
    </form>

    <script language="javascript" type="text/javascript">
        // This is the method that is directly called, this will save signature
        // and then call server code to do further processing. You can change
        // the delay of 5 seconds as per your needs
        function DirectSave() {
            SaveSignature();

            var date = new Date();
            var curDate = null;

            // delay of 5 seconds, 5000 milisecons, change as per requirement
            do { curDate = new Date(); }
            while (curDate - date < 5000);

            return true;
        }
    </script>

</body>
</html>
War es hilfreich?

Lösung

Öffnen Sie die .ascx Markup-Datei der Benutzersteuerung. Es sollte wie folgt lesen:

<%@ Control 
    Language="C#" 
    AutoEventWireup="true" 
    CodeFile="ctlSignature.ascx.cs" 
    Inherits="WebSignatureCapture.SignatureControl.ctlSignature" %>

Ändern Sie es an:

<%@ Control 
    Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="ctlSignature.ascx.cs" 
    Inherits="WebSignatureCapture.SignatureControl.ctlSignature" %>

Hinweis Codefile. -> Codebehind

Andere Tipps

Jemand, den ich kenne ein ähnliches Problem vor einiger Zeit hatte und dann fanden sie etwas, dass sie etwas in der Beginrequest , die sein Problem sortiert und erlaubte ihm, Server-Steuerelemente in Ansichten zu verwenden. Ich habe eine schnelle Suche nach ihr, und ich glaube, dass diese ist, was er verwendet wird.

-Code unten:

void Application_BeginRequest(object sender, EventArgs e)
{
  var form = HttpContext.Current.Request.Form;

  form.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(form, false, null);

  // Refinement 1:
  foreach (var key in form.AllKeys.Where(key => key.Contains("$")))
  { 
    var value = formkey;
    form.Remove(key);
    var newKey = key.Substring(key.LastIndexOf("$") + 1); 
    form.Add(newKey, value);
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top