我的应用需要能够在多个视图上发送电子邮件。我试图使用View Component,这样我就可以重复使用多个逻辑。当用户点击“发送”按钮时,我不想刷新整个视图...我想验证表单并显示任何模型错误,否则发送电子邮件。
以下设置适用于客户端验证,但我不确定如何恢复模型错误服务器端并在视图中显示它们。任何帮助表示赞赏。
Default.cshtml (查看组件 - 使用jquery-ajax-unobtrusive)
public class EmailViewModel
{
[Required]
public string From{ get; set; }
//remaining properties omitted
}
EmailViewModel
[HttpPost]
[Route("/email/send")]
public ActionResult Send(EmailViewModel viewModel)
{
if (!ModelState.IsValid)
{
//how do return my model errors back to my View Component?
}
else
{
//do send logic here
return Content("Success");
}
}
EmailController
tev
答案 0 :(得分:0)
在ViewBag中保持错误
@model EmailViewModel
<div id="Email">
<div class="row section-buffer">
<div class="col-sm-12">
<span class="section-header">Email</span>
</div>
</div>
<div>@ViewBag.Error</div>
<hr />
<form id="EmailForm"
method="post"
class="form-horizontal"
asp-controller="Email"
asp-action="Send"
data-ajax="true"
data-ajax-method="POST"
data-ajax-success="sendEmailSuccess"
data-ajax-failure="sendEmailFailure(xhr, status, error)"
data-ajax-update="Email">
<div class="form-group form-group-sm">
<label class="description-label col-sm-3" asp-for="From"></label>
<div class="col-sm-9">
<input class="form-control" asp-for="From" />
<span asp-validation-for="From" class="text-danger"></span>
</div>
</div>
<!-- remaining fields omitted -->
<div class="form-group form-group-sm">
<div class="col-sm-9 col-sm-offset-3">
<button type="submit" class="btn btn-primary">Send</button>
</div>
</div>
</form>
</div>
返回错误视图
[HttpPost]
[Route("/email/send")]
public ActionResult Send(EmailViewModel viewModel)
{
if (!ModelState.IsValid)
{
//how do return my model errors back to my View Component?
return Content(string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)));
//in send email success javascript method handle this message and show.
}
else
{
//do send logic here
return Content("Success");
}
}