【问题标题】:Post an update to an asp.net core Razor page when the data model changes当数据模型更改时,将更新发布到 asp.net core Razor 页面
【发布时间】:2018-09-28 22:24:37
【问题描述】:

我是 ASP 和 Web 编程的新手。我正在使用 Visual Studio 2017。我创建了一个 Razor Web 应用程序,该应用程序使用了我为 Windows 应用程序编写的现有数据模型。首次加载时,我可以在我的网页上显示我的数据模型中的值,但我不知道如何使页面在我的数据模型中发生更改时显示新值。我习惯于在 WPF 中工作,绑定到 Dependency 属性和 INotifyPropertyChanged 属性。这是我用于 Razor 页面的属性之一:

    [BindProperty]
    public string VersionNumber { get; set; } = "0.0.0.0";

我已验证该属性实际上正在更改,但更改从未反映在网页上。

我已经尝试了几种方法:

<form>
    <label style="margin: 5px;">
        Version
    </label>
    <input type="text" trim="false" uppercase="false" lowercase="false" propercase="false" asp-for="VersionNumber" />
</form>

@Html.TextBoxFor(m => m.VersionNumber)

我意识到我错过了它应该如何工作的概念,希望这个问题的答案能让灯泡亮起来。

【问题讨论】:

    标签: asp.net asp.net-core razor-pages


    【解决方案1】:

    如果我理解正确,您想在模型中的值更改时刷新浏览器中的值 - 您提到 INotifyPropertyChanged。我假设您以某种方式通过计时器或时间表等触发模型更改。

    网站/页面在服务器上呈现,然后在浏览器中显示。因此,要真正获得新值,您需要以某种方式将页面发送回服务器,从模型中获取新值,渲染页面并将其显示在浏览器中。

    为此,您可以使用一个按钮,用户单击并查询服务器以获取新数据。如果这不是您想要的,那么也许您可以检查 SignalR,它用于将更改推送到浏览器中呈现的客户端网站。

    【讨论】:

    • SignalR 看起来非常适合我的需要。谢谢!
    【解决方案2】:

    简而言之,要显示文本,您应该使用 @Html.DisplayFor(c=&gt;c.VersionNumber) 助手。 如果你使用@Html.TextBoxFor(m =&gt; m.VersionNumber),你会告诉 Razor 创建一个文本输入标记。 查看更多信息here

    【讨论】:

    • 我需要 TextBox,因为用户需要能够更改版本号。那不是问题。我的问题是,当后端数据模型中的属性更新时,我不知道如何让网页显示更新的值,无论它是否是 TextBox。我尝试了@Html.DisplayFor(c=>c.VersionNumber) 并得到了相同的结果。
    • 您可以使用简单的输入,例如` `,如果该字段的值不为空,Razor 将显示在输入。要显示更新的值,您需要在更新后刷新页面,例如,在控制器的操作中保存更改后返回重定向到相同的操作
    猜你喜欢
    • 2020-04-25
    • 2015-08-06
    • 2020-05-26
    • 2018-03-11
    • 1970-01-01
    • 2019-10-13
    • 2019-08-02
    • 2019-05-06
    • 2020-04-04
    相关资源
    最近更新 更多