将 JSON 对象传递给控制器

Posted

技术标签:

【中文标题】将 JSON 对象传递给控制器【英文标题】:Passing a JSON object to a controller 【发布时间】:2017-01-11 13:30:30 【问题描述】:

我是 MVC 和 javascript 的新手,虽然这对于一些我已经挣扎了一段时间的人来说可能是一个明显的答案(在查看了许多示例之后)!

通过 Index.cshtml 视图进行调试时,文本框尚未填充 newData 对象(在名为 AddNewProduct.cshtml 的局部视图中设置)。通过单击 Index.cshtml 中设置的按钮来显示部分视图(这工作正常)。我可以看到由于视图的问题,我的控制器中的 newProduct 对象没有被填充。

我的主要问题是如何将文本框中的值放入 newData 对象中?

任何建议将不胜感激!谢谢。

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" />

【问题讨论】:

【参考方案1】:

替换

data: JSON.stringify(newData),

data: newData,

【讨论】:

感谢罗伯特的帮助! @Nick 很高兴我能帮上忙 :)

以上是关于将 JSON 对象传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 对象传递给 MVC 控制器时 string.empty 转换为 null

Angular2 http post没有将json对象传递给MVC 6控制器动作

Javascript ajax 将动态创建的 json 对象传递给 Web 服务

如何将 javascript 对象传递给 C# MVC 4 控制器

如何将json POST数据作为对象传递给Web API方法?

Codeigniter - 如何将 JSON 作为参数传递给视图 [重复]