我有一个错误,我想添加一个链接
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>");
这不能很好地工作。
如果我做错了,我愿意接受其他想法。我还在学习asp.net mvc。
从视图中如何显示
@if (error != null)
{
<strong>
<em> : @Html.Raw(error)</em>
</strong>
}
更新
当我检查页面时。看起来html正在被替换。
<li><a href="/Account/SendEmailConfirmationMail?Email=lilaw@eg.dk">Click me</a></li>
答案 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})");