【发布时间】:2019-06-18 19:05:05
【问题描述】:
在OnPostOrder() 执行后,我无法在下面的示例剃刀视图中更新属性价格。我编写了这个示例视图来执行以下操作:
- 更改产品选择列表时,使用 jquery 的
submit()提交 ProductForm。 - 在提交 ProductForm 时使用
asp-page-handler来点击OnPostOrder()。 注意:如果我的示例中存在语法问题,这在我的实现中有效。 - 我从自定义静态函数中获取所有产品选项,然后通过 productid 获取匹配产品。
- 我将匹配产品的价格设置为 Price 属性。 但是,这不会更新 Price 属性。
示例视图:
@page
@{
@functions{
[BindProperty] public string Product { get; set; }
[BindProperty] public decimal Price { get; set; }
public void OnPostOrder()
{
Price = 25.00;
}
}
List<ProductOption> productOptions = AdminUtil.GetProductOptions();
SelectList productOptionSelectList = new SelectList(productOptions, "ProductId", "Name");
}
<form method="post" id="ProductForm" asp-page-handler="order">
Product: <select asp-for="Product" asp-items="@productOptionSelectList"></select> <br />
Order Amount: <input asp-for="Price" /> <br />
</form>
@section Scripts {
<script>
$(function () {
$('#Product').on('change', function () {
$("#ManualOrderForm").submit();
});
});
</script>
}
我是剃刀页面的新手,所以如果这是一个重复的问题,请指出我正确的方向。我找不到可比较的例子,但我可能没有搜索到正确的术语。
似乎有道理的一个原因是asp-for 生成了HTML name 和value 属性。但是当我在OnPostOrder() 之后调试页面时,我可以点击<input asp-for="OrderAmount" />。
【问题讨论】:
-
您通过执行
AdminUtil.GetProductOptions()方法并使用该方法的输出来获取价格。调试该方法调用并查看该方法返回预期值。与您的表单提交无关。 -
price 属性确实发生了变化,我遵循了刚才的断点。只是不在表格上。
-
我还是不明白你的预期行为是什么。
-
我更新了我的
OnPostOrder()将值设置为 25。假装它之前是 0。执行OnPostOrder()方法后,表单上的值仍为0。那不应该改变表单的价值吗? -
您希望在哪里看到 25 ?您当前没有在表单中打印
Price属性值。那么您希望它在哪里显示呢?你的 OnPost 方法也应该返回一些东西。
标签: c# asp.net-core razor-pages