在AddModelError中添加指向另一个Action的链接

时间:2017-12-14 13:03:09

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

我有一个错误,我想添加一个链接

ModelState.AddModelError(string.Empty, "You must have a confirmed email to log in.");

我想要做的是添加一个指向SendEmailConfirmationMail操作的链接,以便在丢失的情况下重新发送给他们。

[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> SendEmailConfirmationMail(string email, string returnUrl = null)
    {
  // Stuff removed
    }

我尝试了什么

ModelState.AddModelError(string.Empty, 
                         $"You must have a confirmed email to log in. Click to resend conformation email <a href=account/SendEmailConfirmationMail?Email={model.Email}&returnUrl={returnUrl}> resend</a>");

ModelState.AddModelError(string.Empty, $"<a href=\"{Url.Action("SendEmailConfirmationMail", "Account", new { Email = model.Email, returnUrl = returnUrl })}\">Click me</a>");

这不能很好地工作。

enter image description here

如果我做错了,我愿意接受其他想法。我还在学习asp.net mvc。

从视图中如何显示

 @if (error != null)
            {
                <strong>
                    <em> : @Html.Raw(error)</em>
                </strong>
            }

更新

当我检查页面时。看起来html正在被替换。

<li>&lt;a href="/Account/SendEmailConfirmationMail?Email=lilaw@eg.dk"&gt;Click me&lt;/a&gt;</li>

3 个答案:

答案 0 :(得分:3)

如果您控制显示错误的视图,那么最好在视图本身中格式化错误,因为它是表示逻辑。

在控制器中添加模型错误:

ModelState.AddModelError("EmailNotConfirmedError", string.Empty); // You can specify the error message or ignore it

在视图中检查此特定错误:

<div>
    @if (ViewData.ModelState.ContainsKey("EmailNotConfirmedError"))
    {
        <em>You must have a confirmed email to log in. Click to resend conformation email @Html.ActionLink("resend", "SendEmailConfirmationMail", "Account")</em>
    }
</div>

答案 1 :(得分:2)

您的error是一个Html编码的字符串,您需要先使用HttpUtility.HtmlDecode对其进行解码

<em> : @Html.Raw(HttpUtility.HtmlDecode(error))</em>

答案 2 :(得分:1)

而是使用@Url.Action()方法获取网址

你可以像这样使用它:

@Url.Action("MethodName","ControllerName",new{param1 = param1value});

<强>更新 要获取您的URL,请使用以下代码:

var url = Url.Action("Account","SendEmailConfirmationMail",new{Email=model.Email,returnUrl = returnUrl;

ModelState.AddModelError(string.Empty, 
    $"You must have a confirmed email to log in. Click to resend conformation email {url})");