【问题标题】:ASP.NET Core ViewData, BindProperty or TempData?ASP.NET Core ViewData、BindProperty 还是 TempData?
【发布时间】:2019-02-03 14:21:30
【问题描述】:

在 ASP.NET Core 视图和 Razor 页面中我们可以使用:

public class LoginModel
{
    [BindProperty]
    public bool DisplayCaptcha { get; set; }

    // OR

    [ViewData]
    public bool DisplayCaptcha { get; set; }

    // OR

    [TempData]
    public bool DisplayCaptcha { get; set; }
}

在视图/页面/控制器之间共享数据... 但是什么时候使用它们呢?

在我的例子中,它是一个简单的登录页面,当用户设置错误的密码时,我会显示一个验证码。

在表单帖子中,我将属性设置为 true (DisplayCaptcha = true) 并使用验证码呈现页面:

@if (Model.DisplayCaptcha)
{            
    <div class="captcha-header">
        ...
    </div>
}

这工作正常,但我有点混淆属性应该是什么类型,或者即使我应该使用任何类型。

【问题讨论】:

    标签: asp.net-core razor-pages


    【解决方案1】:

    ViewData 应该在数据从 PageModel 传递到 Page 时使用。

    BindProperty 应该在数据从 PageModel 传递到 Page 时使用,反之亦然,通过 POST/GET。这是双向绑定。

    TempData 应该在数据只读取一次时使用。

    在您的情况下,您应该使用BindProperty

    【讨论】:

      【解决方案2】:

      我们使用 ViewData 和 TempData 在回发期间维护对象的状态。但是因为您在每次回发时都设置了它的值,并且它是模型的一部分,所以它应该是 [BindProperty]。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2010-10-30
        • 1970-01-01
        • 2010-09-15
        • 2017-05-14
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        相关资源
        最近更新 更多