2016-09-03 1 views
0

Je suis nouveau sur MVC et JavaScript, et bien que cela puisse être une réponse évidente pour certains, je me bats depuis un moment (après avoir regardé de nombreux exemples)! Lors du débogage à travers la vue Index.cshtml, l'objet newData n'a pas été rempli par les zones de texte (définies dans une vue partielle appelée AddNewProduct.cshtml). La vue partielle est affichée en cliquant sur un jeu de boutons dans Index.cshtml (cela fonctionne très bien). Je peux voir que l'objet newProduct dans mon contrôleur n'a pas été rempli en raison du problème dans la vue.Passer un objet JSON à un contrôleur

Ma question principale est comment puis-je obtenir les valeurs de mes zones de texte dans l'objet newData?

Toutes les suggestions seraient grandement appréciées! Je vous remercie.

HomeController.cs:

[HttpPost] 
     public PartialViewResult RunAddNewProduct(Product newProduct) 
     { 
       SqlConnection con = new SqlConnection(); 
       con.ConnectionString = Connections.connection; 
       con.Open(); 

       using (con) 
       { 
        SqlCommand cmd = new SqlCommand("INSERT INTO Product VALUES(@Id, @Name, @Description, @Price, @UnitsInStock)", con); 

        cmd.Parameters.Add(new SqlParameter("@Id", newProduct.Id)); 
        cmd.Parameters.Add(new SqlParameter("@Name", newProduct.Name)); 
        cmd.Parameters.Add(new SqlParameter("@Description", newProduct.Description)); 
        cmd.Parameters.Add(new SqlParameter("@Price", newProduct.Price)); 
        cmd.Parameters.Add(new SqlParameter("@UnitsInStock", newProduct.UnitsInStock)); 

        SqlDataReader rd = cmd.ExecuteReader(); 

        while (rd.Read()) 
        { 
         newProduct.Id = Convert.ToInt32(rd.GetInt32(0)); 
         newProduct.Name = Convert.ToString(rd.GetSqlValue(1)); 
         newProduct.Description = Convert.ToString(rd.GetSqlValue(2)); 
         newProduct.Price = Convert.ToDecimal(rd.GetDecimal(3)); 
         newProduct.UnitsInStock = Convert.ToInt32(rd.GetInt32(4)); 
        } 
       } 
       return PartialView("AddNewProduct", newProduct);   
     } 

Index.cshtml:

$('#btnConfirmNewProduct').live('click', function() { 

     var newData = { 
       'id': $('#txtId').val(), 
       'name': $('#txtName').val(), 
       'description': $('#txtDesc').val(), 
       'price': $('#txtPrice').val(), 
       'unitsInStock': $('#txtUnitsInStock').val() 
     }; 

     $.ajax({ 
      url: '/Home/RunAddNewProduct', 
      data: JSON.stringify(newData), 
      type: 'POST', 
      dataType: 'json' 
     }) 
      .success(function (result) { 
       $('#products').html(result); 
      }) 
      .error(function (xhr, status) { 
       alert(status); 
      }) 
    }); 

AddNewProduct.cshtml:

<table> 
     <tr> 
      <th>Id</th> 
      <th>Name</th> 
      <th>Description</th> 
      <th>Price</th> 
      <th>Units In Stock</th> 
     </tr> 
     <tr> 
      <td><input id="txtAddId" type="text"/></td> 
      <td><input id="txtAddName" type="text"/></td> 
      <td><input id="txtAddDesc" type="text"/></td> 
      <td><input id="txtAddPrice" type="text"/></td> 
      <td><input id="txtAddUnitsOfStock" type="text"/></td> 
     </tr> 
    </table> 
    <input id="btnConfirmNewProduct" type="button" value="Confirm New Product" /> 

Répondre

1

Remplacer

data: JSON.stringify(newData), 

avec

data: newData, 
+0

Merci pour votre aide Robert! – Nick

+0

@Nick heureux je pourrais aider :) – Robert