在 ASP.NET MVC / C# 中从不调用 ActionResult
ActionResult is never invoked in ASP.NET MVC / C#
我需要在连接到本地数据库的 ASP.NET MVC 应用程序中更新特定产品的价格。
ProductController
如下,应该更新数据库的内容:
[HttpPost]
public ActionResult UpdatePrice(Models.Product product)
{
string query = "UPDATE product SET price=@price WHERE productId=@idproduct";
string constr = "server=localhost;user id=root;password=;database=accounting;persistsecurityinfo=True";
using(MySqlConnection con = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand(query))
{
cmd.Parameters.AddWithValue("@idproduct", product.idproduct);
cmd.Parameters.AddWithValue("@price", product.price);
cmd.Parameters.AddWithValue("@name", product.name);
cmd.Parameters.AddWithValue("@description", product.description);
cmd.Parameters.AddWithValue("@cost", product.cost);
cmd.Parameters.AddWithValue("@quantity", product.quantity);
cmd.Parameters.AddWithValue("@sku", product.sku);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(product.price);
con.Close();
}
}
return new EmptyResult();
}
这是产品视图,在同一个文件中显示所有产品并允许用户使用 Javascript
编辑产品价格
<table class="table" id="tblProducts">
<tr>
<th>
@Html.DisplayNameFor(model => model.name)
</th>
<th>
@Html.DisplayNameFor(model => model.description)
</th>
<th>
@Html.DisplayNameFor(model => model.price)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td class="Product Name">
<span>@item.name</span>
</td>
<td class="Description">
<span>@item.description</span>
</td>
<td class="Price">
<span>@item.price</span>
<input type="text" value="@item.price" style="display:none; width: 50px;" />
</td>
<td>
<a class="Edit" href="javascript:;" " >Edit</a>
<a class="Update" href="javascript:;" "style="display:none">Update</a>
<a class="Cancel" href="javascript:;" style="display:none">Cancel</a>
</td>
</tr>
}
</table>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
//Edit event handler.
$("body").on("click", "#tblProducts .Edit", function () {
var row = $(this).closest("tr");
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
$(this).find("input").show();
$(this).find("span").hide();
}
});
row.find(".Update").show();
row.find(".Cancel").show();
row.find(".Delete").hide();
$(this).hide();
});
//Update event handler.
$("body").on("click", "#tblProducts .Update", function () {
var row = $(this).closest("tr");
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
var span = $(this).find("span");
var input = $(this).find("input");
span.html(input.val());
span.show();
input.hide();
}
});
row.find(".Edit").show();
row.find(".Delete").show();
row.find(".Cancel").hide();
$(this).hide();
var product = {};
//product.idproduct= row.find(".productId").find("span").html();
//product.name = row.find(".Product Name").find("span").html();
product.price = row.find(".Price").find("span").html();
$.ajax({
type: "POST",
url: "/Product/UpdatePrice",
data: '{product:' + JSON.stringify(product) + '}',
contentType: "application/json; charset=utf-8",
dataType: "json"
});
});
</script>
我遇到的问题是价格在html页面更新了,我可以看到变化,但实际上没有变化应用到数据库,看着它我只能看到更新如果我实际上从 MySql Workbench 手动更新数据库。关于我应该做什么的任何建议?我在 Visual Studio 中设置了断点,似乎 Product 模型中的价格发生了变化,但数据库中没有任何更新。
在您看来,将产品 ID 放入隐藏输入中,这样您就可以在 post:
时将其传递给控制器
...
@foreach (var item in Model)
{
<tr>
<td class="Product Name">
<span>@item.name</span>
</td>
<td class="Description">
<span>@item.description</span>
</td>
<td class="Price">
<span>@item.price</span>
<input type="text" value="@item.price" style="display:none; width: 50px;" />
</td>
<td>
@*Adding a hidden input with the product id on next line*@
<input type="hidden" value="@item.idproduct" style="display:none;" class="hdn-product-id" />
<a class="Edit" href="javascript:;" " >Edit</a>
<a class="Update" href="javascript:;" "style="display:none">Update</a>
<a class="Cancel" href="javascript:;" style="display:none">Cancel</a>
</td>
</tr>
}
现在您可以在按下更新按钮时获取产品 ID,我还为您的 Ajax:
添加了 success
和 error
回调
//Update event handler.
$("body").on("click", "#tblProducts .Update", function () {
const row = $(this).closest("tr");
//now we can get the product id to pass to the controller
const prodid = $(this).closest('td').find('.hdn-product-id').val();
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
var span = $(this).find("span");
var input = $(this).find("input");
span.html(input.val());
span.show();
input.hide();
}
});
row.find(".Edit").show();
row.find(".Delete").show();
row.find(".Cancel").hide();
$(this).hide();
var product = {};
product.price = row.find(".Price").find("span").html();
//set the id to the model
product.idproduct = prodid;
$.ajax({
type: "POST",
url: "/Product/UpdatePrice",
data: '{product:' + JSON.stringify(product) + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
//do something on success of post
},
error: function(jqXHR, exception){
//do something on error
}
});
});
现在,当您的 Post 方法出现时,您应该拥有要更新的产品 ID,并且您的查询将按预期运行。
我需要在连接到本地数据库的 ASP.NET MVC 应用程序中更新特定产品的价格。
ProductController
如下,应该更新数据库的内容:
[HttpPost]
public ActionResult UpdatePrice(Models.Product product)
{
string query = "UPDATE product SET price=@price WHERE productId=@idproduct";
string constr = "server=localhost;user id=root;password=;database=accounting;persistsecurityinfo=True";
using(MySqlConnection con = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand(query))
{
cmd.Parameters.AddWithValue("@idproduct", product.idproduct);
cmd.Parameters.AddWithValue("@price", product.price);
cmd.Parameters.AddWithValue("@name", product.name);
cmd.Parameters.AddWithValue("@description", product.description);
cmd.Parameters.AddWithValue("@cost", product.cost);
cmd.Parameters.AddWithValue("@quantity", product.quantity);
cmd.Parameters.AddWithValue("@sku", product.sku);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(product.price);
con.Close();
}
}
return new EmptyResult();
}
这是产品视图,在同一个文件中显示所有产品并允许用户使用 Javascript
编辑产品价格<table class="table" id="tblProducts">
<tr>
<th>
@Html.DisplayNameFor(model => model.name)
</th>
<th>
@Html.DisplayNameFor(model => model.description)
</th>
<th>
@Html.DisplayNameFor(model => model.price)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td class="Product Name">
<span>@item.name</span>
</td>
<td class="Description">
<span>@item.description</span>
</td>
<td class="Price">
<span>@item.price</span>
<input type="text" value="@item.price" style="display:none; width: 50px;" />
</td>
<td>
<a class="Edit" href="javascript:;" " >Edit</a>
<a class="Update" href="javascript:;" "style="display:none">Update</a>
<a class="Cancel" href="javascript:;" style="display:none">Cancel</a>
</td>
</tr>
}
</table>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
//Edit event handler.
$("body").on("click", "#tblProducts .Edit", function () {
var row = $(this).closest("tr");
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
$(this).find("input").show();
$(this).find("span").hide();
}
});
row.find(".Update").show();
row.find(".Cancel").show();
row.find(".Delete").hide();
$(this).hide();
});
//Update event handler.
$("body").on("click", "#tblProducts .Update", function () {
var row = $(this).closest("tr");
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
var span = $(this).find("span");
var input = $(this).find("input");
span.html(input.val());
span.show();
input.hide();
}
});
row.find(".Edit").show();
row.find(".Delete").show();
row.find(".Cancel").hide();
$(this).hide();
var product = {};
//product.idproduct= row.find(".productId").find("span").html();
//product.name = row.find(".Product Name").find("span").html();
product.price = row.find(".Price").find("span").html();
$.ajax({
type: "POST",
url: "/Product/UpdatePrice",
data: '{product:' + JSON.stringify(product) + '}',
contentType: "application/json; charset=utf-8",
dataType: "json"
});
});
</script>
我遇到的问题是价格在html页面更新了,我可以看到变化,但实际上没有变化应用到数据库,看着它我只能看到更新如果我实际上从 MySql Workbench 手动更新数据库。关于我应该做什么的任何建议?我在 Visual Studio 中设置了断点,似乎 Product 模型中的价格发生了变化,但数据库中没有任何更新。
在您看来,将产品 ID 放入隐藏输入中,这样您就可以在 post:
时将其传递给控制器...
@foreach (var item in Model)
{
<tr>
<td class="Product Name">
<span>@item.name</span>
</td>
<td class="Description">
<span>@item.description</span>
</td>
<td class="Price">
<span>@item.price</span>
<input type="text" value="@item.price" style="display:none; width: 50px;" />
</td>
<td>
@*Adding a hidden input with the product id on next line*@
<input type="hidden" value="@item.idproduct" style="display:none;" class="hdn-product-id" />
<a class="Edit" href="javascript:;" " >Edit</a>
<a class="Update" href="javascript:;" "style="display:none">Update</a>
<a class="Cancel" href="javascript:;" style="display:none">Cancel</a>
</td>
</tr>
}
现在您可以在按下更新按钮时获取产品 ID,我还为您的 Ajax:
添加了success
和 error
回调
//Update event handler.
$("body").on("click", "#tblProducts .Update", function () {
const row = $(this).closest("tr");
//now we can get the product id to pass to the controller
const prodid = $(this).closest('td').find('.hdn-product-id').val();
$("td", row).each(function () {
if ($(this).find("input").length > 0) {
var span = $(this).find("span");
var input = $(this).find("input");
span.html(input.val());
span.show();
input.hide();
}
});
row.find(".Edit").show();
row.find(".Delete").show();
row.find(".Cancel").hide();
$(this).hide();
var product = {};
product.price = row.find(".Price").find("span").html();
//set the id to the model
product.idproduct = prodid;
$.ajax({
type: "POST",
url: "/Product/UpdatePrice",
data: '{product:' + JSON.stringify(product) + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
//do something on success of post
},
error: function(jqXHR, exception){
//do something on error
}
});
});
现在,当您的 Post 方法出现时,您应该拥有要更新的产品 ID,并且您的查询将按预期运行。