ASP.NET Core ViewData, BindProperty или TempData? - PullRequest
0 голосов
/ 29 августа 2018

В ASP.NET Core Views и Razor Pages мы можем использовать:

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

    // OR

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

    // OR

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

Для обмена данными между View / Page / Controller ... Но когда использовать каждый из них?

В моем случае это простая страница входа в систему, и когда пользователь установит неправильный пароль, я покажу капчу.

В форме сообщения я устанавливаю для свойства значение true (DisplayCaptcha = true) и отображаю страницу с помощью капчи:

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

Это работает нормально, но я немного путаюсь, какой тип атрибута должен быть, или даже если я должен его использовать.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

ViewData следует использовать при передаче данных из PageModel в Page.

BindProperty следует использовать, когда данные передаются из PageModel в Page и наоборот через POST / GET. Это двусторонняя привязка.

TempData следует использовать, когда данные должны быть прочитаны только один раз.

В вашем случае вы должны использовать BindProperty.

0 голосов
/ 29 августа 2018

Мы используем ViewData и TempData для поддержания состояния объекта во время обратной передачи. Но поскольку вы устанавливаете его значение для каждого постбэка, и оно является частью модели, поэтому оно должно быть [BindProperty].

...