0

After a struggle and some Stackoverflow help I finally got my jQuery to execute right and call my submit method. Right now it only passes null values, and I can't seem to get it to pass my input values.

Here is my HTML with the jQuery at the bottom:

@{
    ViewBag.Title = "EventCrush - Registrer Privatbruger";
}

<div class="container-fluid">
    <div class="row">
        <div class="col-md-2 right-content">
            <img src="/Content/img/logo.png" class="animated bounceInDown">
        </div>
        <div class="col-md-8 center-content">
            <h3 class="">Opret Konto</h3><br>
            <span>
                Med en bruger på EventCrush får du flere muligheder, som f.eks. muligheden for at oprette events!<br>
                Det tager kun 2 minutter, så er du klar!
            </span>
            <br /><br />
            <a href="@Url.Action("CorporateUser", "Create")" class="button button-big"><img src="@Url.Content("~/Content/img/ui-icon/corporate-w.png")" style="height: 35px; margin-top: -6px;" /> Erhvervskunde, tryk her!</a>
            <br /><br />
        </div>
        <div class="col-md-4"></div>
    </div>
    <div class="row">
        <div class="col-md-2"></div>
        <div class="col-md-4">
            <form id="PrivateUser">
                <div class="form-group">
                    <label class="sr-only">Fornavn</label>
                    <input id="Fornavn" type="text" class="form-control-1" placeholder="Fornavn *" required>
                </div>
                <div class="form-group">
                    <label class="sr-only">Efternavn</label>
                    <input id="Efternavn" type="text" class="form-control-1" placeholder="Efternavn *" required>
                </div>
                <div class="form-group">
                    <label class="sr-only">Email</label>
                    <input id="Email" type="Email" class="form-control-1" placeholder="Email *" required>
                </div>
                <script> $('.datepicker').datepicker({ language: "da", orientation: "bottom auto" });</script>
                <div class="form-group">
                    <label class="sr-only">Fødselsdag</label>
                    <input id="Fødselsdag" class="datepicker form-control-1" placeholder="Fødselsdag *" required data-provide="datepicker" data-date-clearbtn="true" data-date-autoclose="true" data-date-format="mm/dd/yyyy">
                </div>
                <div class="form-group">
                    <label class="sr-only">Password</label>
                    <input id="Password" type="password" class="form-control-1" placeholder="Kodeord *">
                </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                <label class="sr-only">Vejnavn</label>
                <input id="Vejnavn" type="text" class="form-control-1" placeholder="Vejnavn *">
            </div>
            <div class="form-group">
                <label class="sr-only">Vejnummer</label>
                <input id="Vejnummer" type="number" class="form-control-1" placeholder="Vejnummer *">
            </div>
            <div class="form-group">
                <label class="sr-only">By</label>
                <input id="By" type="text" class="form-control-1" placeholder="By *">
            </div>
            <div class="form-group">
                <label class="sr-only">Postnummer</label>
                <input id="Postnummer" type="text" class="form-control-1" placeholder="Postnummer *" required>
            </div>
            <div class="form-group">
                <label class="sr-only">Land</label>
                <input id="Land" type="text" class="form-control-1" placeholder="Land *">
            </div>
            <div class="form-group">
                <label class="sr-only">Telefonnummer</label>
                <input id="Telefonnummer" type="number" class="form-control-1" placeholder="Telefonnummer">
            </div>
            <script type="text/javascript">
                $(document).ready(function () {
                    $("#Submit1").on("click", function (e) {
                        $.ajax({
                            type: "POST",
                            url: '@Url.Action("Submit", "Create")',
                            data: $('#PrivateUser').serialize(),
                            datatype: "json",
                            success: function (data) {
                                var str = '@ViewData';
                                alert(str);
                                $('#result').html(data)
                            }
                        });
                        e.preventDefault(); //prevent the form from submitting
                    });
                });
            </script>
            <button type="submit" id="Submit1" value="Submit">Opret Bruger</button>
            * Skal udfyldes
        </div>
        </form>

        <div class="col-md-2"></div>
    </div>
</div>
<!-- Content: End -->

and here is the controller with my method:

 public static MySqlConnection GetConnection(string host, string user, string pwd, string db)
    {
        string conStr = string.Format("server={0};uid={1};pwd={2};database={3}", host, user, pwd, db);
        var con = new MySqlConnection();
        con.ConnectionString = conStr;
        con.Open();
        return con;
    }

    public static MySqlConnection GetDefaultConnection()
    {
        return GetConnection("localhost", "root", "", "EventCrush");
    }

    public ActionResult Submit(string Fornavn, string Efternavn, string Email, string Telfonnummer, string Brugernavn, string Kodeord)
    {
        var con = GetDefaultConnection();
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "insert into Private_User values (@Username, @PW, @FirstName, @LastName, @Email, @PhoneNumber)";
        cmd.Prepare();
        cmd.Parameters.AddWithValue("@Username", Brugernavn);
        cmd.Parameters.AddWithValue("@PW", Kodeord);
        cmd.Parameters.AddWithValue("@FirstName", Fornavn);
        cmd.Parameters.AddWithValue("@LastName", Efternavn);
        cmd.Parameters.AddWithValue("@Email", Email);
        cmd.Parameters.AddWithValue("@PhoneNumber", Telfonnummer);
        cmd.ExecuteNonQuery();
        if (con != null) { con.Close(); }
        return View();
    }

When running it i get this error:

Column count doesn't match value count at row 1

I ran it with a break point at the method and could see it was all null values.

Can someone see why the jQuery does not pass any information?

Jason
  • 15,017
  • 23
  • 85
  • 116
  • this generally happens when you don't have all the columns' value mentioned. Try this : `insert into Private_User(Username,Password,FirstName,LastName,Email,PhoneNumber) values (@Username, @PW, @FirstName, @LastName, @Email, @PhoneNumber)` – Abhishek Ghosh May 01 '15 at 19:27
  • This worked, thank you.. But still got the problem that my jQuery is passing null values to the method ;( but the exception is gone :) – Niclas Allentoft Jørgensen May 01 '15 at 19:38
  • probably because your not sending any values . Are you sure you can serialize the form in that way ?? – Abhishek Ghosh May 01 '15 at 19:39
  • Please see this question : http://stackoverflow.com/questions/25068431/how-to-call-mvc-action-using-jquery-ajax-and-then-submit-form-in-mvc – Abhishek Ghosh May 01 '15 at 19:44

1 Answers1

0

In your html, you must to put all input inside form with a namee value (you are putting id, class, .... but no name attribute and this is required because will be the name of the variable on server side .... and jquery to create the array data with $.serialize use this name).

Jose Mato
  • 2,709
  • 1
  • 17
  • 18
  • Just realized this myself a few minutes ago, by reading through google :) But marked your answer as the right one as thos was the mehod i used, and i am not saving to my database :) Thank you for your time :) – Niclas Allentoft Jørgensen May 01 '15 at 20:38