복붙노트

[SQL] .NET 간단한 양식 AJAX와 JQUERY를 통해 제출

SQL

.NET 간단한 양식 AJAX와 JQUERY를 통해 제출

나는이 balexandre 및 rtiq 모든 밖으로 일 덕분에 흐름을 가지고있다. 내가 코드의 일부가 작동 알 수 있도록 내 .ASHX 파일이 호출되고 그것은 오류로 저를 경고한다. 나는 .NET을 추적 할 때, context.Request [ "이메일"]와 context.Request [ "수신 선택"]를 통해 당겨 변수는 NULL이다.

나는 거기의 뭔가 잘못 알고 있지만 나는 그것을 볼 수 없습니다. 나는 최신 코드가이 게시물을 다시 편집했습니다.

<script type="text/javascript">
    $(document).ready(function () {
        $(".submitConnectButton").click(function (evt) {
            evt.preventDefault();
            alert("hello click");

            alert($(".emailConnectTextBox").val());

            $.ajax({
                type: "POST",
                url: "/asynchronous/insertEmail.ashx",
                data: "{email: '" + $(".emailConnectTextBox").val() + "',optin: '" + $(".connectCheckbox").val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) { alert(msg.d); },
                error: function (msg) { alert('Error:' + msg); }
            });
        });
    });
</script>
<div class="emailConnect">
    <asp:TextBox runat="server" ID="TextBox1" CssClass="emailConnectTextBox" BorderStyle="Solid"></asp:TextBox>
              <asp:ImageButton id="connectButton" CssClass="submitConnectButton" runat="server" ImageUrl="~/Images/submit_btn.png" /><br />
    <asp:CheckBox Checked="true" id="checkbox1" runat="server" CssClass="connectCheckbox" />
</div>
public class insertEmail : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string strConnection = System.Configuration.ConfigurationManager.AppSettings["SQLConnectString"].ToString();

        string email = context.Request["email"],
               optin = context.Request["optin"];

        string strSQL = "INSERT INTO Emails (emailAddress,optIn) VALUES('" + email.ToString() + "','" + optin.ToString() + "')";
        SqlConnection Conn = new SqlConnection(strConnection); 
        SqlCommand Command = new SqlCommand(strSQL, Conn);
        Conn.Open();
        Command.ExecuteNonQuery(); 
        Conn.Close(); 
        context.Response.ContentType = "text/plain"; 
        context.Response.Write("email inserted");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

형태 및 요소가 제대로 작동하고 있습니다. 우리는이 NULL 값을 받고 삽입 할 수있는 것은 아니다. 아약스 제대로 .ASHX 파일을 호출하고 파일을 컴파일, 요청 변수가 null입니다 .. 누군가가 당신이 하루에 골드 스타를 얻을 것, 내가이 마지막 꼬임을 얻을 수 있도록 할 수 있다면 이전에 도움이 굉장했다! :)

책의 일부 검색 오프라인 후이 마침내 balexandres에서 .aspx 방법과 함께 나를 위해 일한 :

$.post("/asynchronous/addEmail.aspx", {email: $(".emailConnectTextBox").val(),optin: $(".connectCheckbox").is(':checked')}, function(data) { alert('Successful Submission');});

해결법

  1. ==============================

    1..

    .

    public void Page_Load(...) 
    {
        insertEmail();
    }
    
    public void inserEmail() {
    
        string email = Request["email"],
               optin = Request["optin"];
    
        string strSQL = "INSERT INTO Emails (emailAddress,optIn) VALUES('" + email.ToString() + "', optin)";
        SqlConnection Conn = new SqlConnection(strConnection);
        SqlCommand Command = new SqlCommand(strSQL, Conn);
        Conn.Open();
        Command.ExecuteNonQuery();
        Conn.Close();
    
        // Output
        Response.Write("email inserted");
    }
    

    당신은 성공에 MSG에있을 것이다 : 기능 (MSG)를 {} 문자열 이메일이 삽입

    이것은 내가 항상 대신 ASPX 페이지를 만드는하지만, 무엇을, 난 (빠른 부하) 모든 ASP.NET 페이지주기를 포함하지 않는 ASHX (일반 처리기) 페이지를 사용하고 간단한 페이지입니다.

    당신이 대신 일반 처리기를 사용하려는 경우, inserEmail.ashx라는 파일 폴더 비동기 내부에 생성하고 전체 코드는 다음과 같습니다

    public class insertEmail : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string email = context.Request["email"],
                   optin = context.Request["optin"];
    
            string strSQL = "INSERT INTO Emails (emailAddress,optIn) VALUES('" + email.ToString() + "', optin)";
            SqlConnection Conn = new SqlConnection(strConnection);
            SqlCommand Command = new SqlCommand(strSQL, Conn);
            Conn.Open();
            Command.ExecuteNonQuery();
            Conn.Close();
    
            context.Response.ContentType = "text/plain";
            context.Response.Write("email inserted");
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    

    그리고, URL로 url 속성을 변경해야합니다 : "/asynchronous/insertEmail.ashx"

    귀하의 코멘트에서 나는 당신의 데이터 속성이 또한 정확하지 것을 깨달았다.

    올바른 있습니다 :

    data: { 
            "email" : $(".emailConnectTextBox").val(), 
            "optin" : $(".connectCheckbox").val() },
    

    전체 아약스 호출해야합니다 :

    $.ajax({
        type: "POST",
        url: "/asynchronous/insertEmail.ashx",
        data: { 
            "email" : $(".emailConnectTextBox").val(), 
            "optin" : $(".connectCheckbox").val() 
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) { 
            alert(msg.d); 
        },
        error: function (msg) { 
            alert('Error:' + msg.d); 
        }
    });
    

    및 일반 처리기에서 Response.Write를은 JSON 문자열을뿐만 아니라 통과해야

    그래서, 변화 ( "이메일이 삽입") context.Response.Write는 TGIS; context.Response.Write ( "{D '이메일 삽입'})로;

    그게 다야.

  2. ==============================

    2.

     $("button").click(function(){
     var content = new Object();
     content.email = $("#email").val();
     content.option = $("#checkbox").val();
     content = JSON.stringify(content);
    
    
     $.ajax({
            async: false,
            type: "POST",
            url: aspxPage + "/" + function, //make sure root is set proper.
            contentType: "application/json;",
            data: content,
            dataType: "json",
            success: successFunction,
            error: errorFunction
        });
        });
    
    
        //Make sure the form is posted ..which is needed for ajax to submit.
        //the data part in code behind seems ok.
    
  3. ==============================

    3.당신은 당신의 HTML 코드 및 제출 사용할 수 없습니다 때문에 양식이 없습니다. rciq가 쓴 사용 대신 클릭합니다.

    당신은 당신의 HTML 코드 및 제출 사용할 수 없습니다 때문에 양식이 없습니다. rciq가 쓴 사용 대신 클릭합니다.

  4. ==============================

    4.이 변경보십시오 :

    이 변경보십시오 :

    $("#connectButton").submit(function () {
        alert("hello click");
        (...)
    

    이에:

    $("#connectButton").click(function (evt) {
        evt.preventDefault();
        alert("hello click");
        (...)
    

    또한 당신은 ASP.NET 서버 컨트롤의 ID가 렌더링 된 DOM 제어 ID와 동일하지 않습니다 것을 기억해야합니다. 이것은 당신의 경고가 발생하지 않는 이유가 될 수 있습니다. 서버 컨트롤로 같은 페이지에 클라이언트 스크립트를 작성하는 경우, 당신은 스크립트 태그 이런 식으로 내부 클라이언트 ID를 '렌더링'할 수 있습니다 :

    $("<%= connectButton.ClientID %>").click( ...
    

    또 다른 한가지. 당신은 HEAD 스크립트에서 jQuery를 선택을 사용하는 경우 그들은 컨트롤을 찾기 위해 너무 일찍 발사 될 수 있습니다. DOM을 컨트롤을 만든 후이를 실행해야합니다. 이 작업을 수행하는 한 것은 '준비'이벤트를 사용하는 것입니다 :

    http://api.jquery.com/ready/

  5. from https://stackoverflow.com/questions/6330384/net-simple-form-submit-via-ajax-and-jquery by cc-by-sa and MIT license