c# - Razor View 的有界属性在发布后未更新

标签 c# asp.net-core razor-pages

OnPostOrder() 之后,我无法在下面的示例 Razor View 中获取属性价格进行更新。执行。我编写此示例 View 是为了执行以下操作:

  • 在更改产品选择列表时,使用 jquery 的 submit() 提交 ProductForm .
  • 使用asp-page-handlerOnPostOrder()提交 ProductForm 时。 注意:这在我的实现中有效,如果我的示例中存在语法问题,我们深表歉意。
  • 我从自定义静态函数中获取所有产品选项,然后通过 productid 获取匹配的产品。
  • 我将匹配产品的价格设置为 Price 属性。 但是,这不会更新 Price 属性。

示例 View :

@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>
}

我是 razor pages 的新手,所以如果这是一个重复的问题,请指出正确的方向。我没能找到可比较的例子,但我可能没有搜索到正确的术语。

一个似乎有道理的原因是 asp-for生成 HTML namevalue属性。但是当我在 OnPostOrder() 之后调试页面时我能打 <input asp-for="OrderAmount" /> .

最佳答案

发生这种情况是因为在呈现输入元素标记时,输入标签助手首先检查模型状态字典中的任何值,如果找到该属性的值,将使用该值。这就是您看到通过表单提交从输入元素传递的原始值的原因。

解决方案是从模型状态字典中删除这个特定项目。您可以使用 ModelState.Remove 方法来执行此操作。

public IActionResult OnPost()
{       
    this.Price = 25;

    ModelState.Remove("Price");  // This line does the trick
    return Page();
}

我还建议您为您的属性使用正确的类型。如果您要处理数值,请使用诸如 intdecimal 之类的数字类型,而不是字符串。

关于c# - Razor View 的有界属性在发布后未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54356921/

相关文章:

c# - 是否可以强制将 "using"用于一次性类(class)?

jquery - 将循环中的项目 ID 传递给 Jquery

entity-framework - 嵌套的 async/await 调用是否会带来性能提升?

c# - 如何在 asp.net core razor pages 2.2 中设置日期格式和区域性

asp.net - Razor 页面客户端站点验证不起作用

c# - 如何判断数组是否在栈中?

C#清除已关闭应用程序的托盘图标

c# - 访问 UWP ControlTemplate 中的元素或控件

c# - 如何在 ASP .NET Core 中生成和管理 API key

html-helper - 如何将模型传递给 Razor 页面自定义助手