【问题标题】:How to show a temporally Success Message without using query parameters?如何在不使用查询参数的情况下显示临时成功消息?
【发布时间】:2020-09-12 00:44:19
【问题描述】:

我想在用户注册后仅一次在视图SingIn.cshtml 中显示成功消息。为了做到这一点,我正在考虑向 SingIn Action 方法发送一个布尔参数,这样 View SingIn.cshtml 就会得到它,然后选择它是否应该显示它,但是因为该参数将出现在查询字符串中(app.com/Account/SignIn?parameter=true),用户可以刷新页面并一次又一次地看到它,或者他可以输入 url 并再次看到它。那么我该怎么做完成我的方法而不在查询字符串 (app.com/Account/SignIn) 上显示参数? 这是我的控制器:

public class AccountController : Controller
{
    private readonly SignInManager<Client> _signInManager;
    private readonly UserManager<Client> _userManager;

    public AccountController(UserManager<Client> userManager, SignInManager<Client> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    [HttpGet]
    public IActionResult SignUp()
    {
        return View(new SignUpViewModel());
    }

    [HttpPost]
    public async Task<IActionResult> SignUp(SignUpViewModel viewModel)
    {
        if (ModelState.IsValid)
        {
            var client = new Client
            {
                UserName = viewModel.Id, FullName = viewModel.FullName, BirthDate = viewModel.BirthDate.Value,
                Email = viewModel.Email
            };
            var result = await _userManager.CreateAsync(client, viewModel.Password);
            if (result.Succeeded)
                return RedirectToAction("SignIn", new {DidHeJustSignUp = true});
        }

        return View(viewModel);
    }

    [HttpGet]
    public IActionResult SignIn(bool didHeJustSignUp)
    {
        var model = new SignInViewModel {DidHeJustSignUp = didHeJustSignUp};
        return View(model);
    }
}

这是我的看法:

@model SignInViewModel
@{
    ViewBag.Title = "Sign In";
}

<form asp-controller="Account" asp-action="SignIn" method="post">
    @{
        if (Model.DidHeJustSignUp)
        {
            <div class="alert alert-success text-center">
                You have been registred Successfully, please Sign In
            </div>
        }
    }
    <div class="form-group">
        <label asp-for="Id"></label>
        <input type="text" class="form-control" asp-for="Id">
        <span class="text-danger" asp-validation-for="Id"></span>
    </div>
    <div class="form-group">
        <label asp-for="Password"></label>
        <input type="password" class="form-control" asp-for="Password"/>
        <span class="text-danger" asp-validation-for="Password"></span>
    </div>
    <div class="form-check form-check-inline">
        <input class="form-check-input" type="checkbox" asp-for="ShouldIRememberYou">
        <label class="form-check-label" asp-for="ShouldIRememberYou">Remember me</label>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc


    【解决方案1】:

    您可以在此处使用TempData,您放入 TempData 的任何内容都会在下一个请求完成后丢弃。

    if (result.Succeeded)
    {
        TempData["DidHeJustSignUp"] = true;
        return RedirectToAction("SignIn");
    }
    
    if (TempData["DidHeJustSignUp"] != null)
            {
                <div class="alert alert-success text-center">
                    You have been registred Successfully, please Sign In
                </div>
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2017-08-03
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多