在 C# Razor 中调用的 JavaScript

Posted

技术标签:

【中文标题】在 C# Razor 中调用的 JavaScript【英文标题】:JavaScript called in C# Razor 【发布时间】:2021-07-29 04:03:08 【问题描述】:

我正在尝试在我的 RazorModel 文件中调用一个 JS 函数,以提醒用户他已成功登录。

我尝试过使用 TempDatas、ViewDatas、ModelStates 甚至静态变量,但没有成功。

经过一些搜索,我发现你可以通过 ScriptManager 调用 JS 代码,但我无法引用 System.Web.UI,因为我正在运行 ASP.NET CORE 3.1

这是我调用 POST 的方法。我想在重定向到主页之前显示 alert()。

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        
            returnUrl = returnUrl ?? Url.Content("~/");

            if (ModelState.IsValid)
            
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
                if (result.Succeeded)
                                       
                    _logger.LogInformation("User logged in.");
                    return LocalRedirect(returnUrl);
                
                if (result.RequiresTwoFactor)
                
                    return RedirectToPage("./LoginWith2fa", new  ReturnUrl = returnUrl, RememberMe = Input.RememberMe );
                
                if (result.IsLockedOut)
                
                    _logger.LogWarning("User account locked out.");
                    return RedirectToPage("./Lockout");
                
                else
                
                    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    return Page();
                
            

            // If we got this far, something failed, redisplay form
            return Page();
        

更新: 解决了我使用基于 localStorage 的 javascript 保存变量以便跟踪使用情况的问题。

在我的 _LoginPartial 中

@if (SignInManager.IsSignedIn(User))

    <script>
        $(document).ready(function () 
            var loginPrompt = localStorage.getItem("loginPrompt")
            if (loginPrompt != 1) 
                alert("Bine te-am gasit zeule! Hai si ia niste Doge.")
                localStorage.setItem("loginPrompt", 1)
            ;
        );
    </script>

else

    <script>
        $(document).ready(function () 
            localStorage.setItem("loginPrompt", 0);
        );
    </script>

【问题讨论】:

请不要用您的答案更新问题。相反,您应该在下面添加自己的答案,解释它的工作原理以及它如何解决您的问题。您还应该在可能的情况下接受它作为 答案。 【参考方案1】:

当模型错误添加时,您可以使用此脚本来调用警报:

在Controller中,modelError已被添加:

ModelState.AddModelError(string.Empty, "Invalid login attempt.");

然后查看以检测并显示警报:

<script>
    @if (!ViewData.ModelState.IsValid)
    
        <text>
        $(document).ready(function() 
            alert('@ViewData.ModelState[""].Errors.First().ErrorMessage');
        );
        </text>
    
</script>

【讨论】:

这不符合我的标准。我使用在动态变量上运行的基于 localStorage 的 javaScript 解决了我的问题。无论如何,谢谢你的帮助。

以上是关于在 C# Razor 中调用的 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Razor——ASP.NET Razor - C#代码语法

Razor - C#变量

Razor - C#变量

Razor - C#变量

Razor - C#变量

MVC 3 Razor 视图:从布尔模型值生成 JavaScript