[英]Mvc Html.Partial() not working when called with ViewDataDictionary parameter
[英]HTML.Partial() is not working when displaying it?
在Asp.net mvc 5中,我们有一个登录页面,该页面实现HTML.BeginForm()将数据发布到控制器,如果用户名和密码不正确,我们将使用部分视图将错误发送回前端。 一切正常,如果出现错误,则仅错误消息显示在屏幕上,而没有其他任何显示。
调节器
[HttpPost]
public ActionResult SingleSSOMPLogin(SSoStateModel model)
{
//Check the Code with SP providers and Authorization server.
if(model.SAMLAssertion.validMPData)
{
return RedirectToAction("SSOServiceMP" , "SAML");
}else
{
//Error message processed.
model.errorMessage = SSOState.SAMLAssertion.errorMessage;
return PartialView("_LoginError" , model);
}
}
该视图包含以下代码
<div class="peripheral">
<div class="panel panel-default panel-peripheral">
@{Html.Partial("_LoginError", Model);}
<div class="panel-heading clearfix">Please Log In</div>
<div class="panel-body">
<div class="brand-logo eop-logo">
<script type="text/javascript">
function changeImage() {
document.getElementById("Logo").src = '@Url.Content("~/Content/images/TopLogo.gif")';
}
</script>
<img id="Logo" width="200" src='@Url.Content("~/Content/images/TopLogo.gif")' onerror="changeImage()" />
@{ Html.EnableClientValidation(true);}
<!--Ajax call to Controller-->
@using (Html.BeginForm("SingleSSOMPLogin", "Accounts"))
{
@Html.ValidationSummary(true);
<div id="group-email" class="form-group col-md-12 ">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", placeholder = "Please enter your Email address" })
@Html.ValidationMessageFor(m => m.Email)
</div>
<div id="group-password" class="form-group col-md-12">
@Html.PasswordFor(m => m.Password, new { @class = "form-control", placeholder = "Please enter your password" })
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="form-group">
<div class="col-md-12">
<button type="submit" class="btn btn-primary pull-left">Login</button>
<a id="forgot" href='@Url.Action("ForgotPassword","Accounts")' class="btn btn-link btn-sm pull-right">Forgot your password?</a>
</div>
</div>
}
</div>
</div>
</div>
</div>
部分视图
@{
Layout = null;
}
@if (Model.Result!= null)
{
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<strong>@Model.Result.errorMessage</strong>
</div>
}
当发生错误时,所有查询参数均消失,我再次重定向到同一视图,并且仅显示错误消息。
如何解决以下问题?
局部视图将仅返回您定义的片段。 因此,当从“完整”视图调用时,
@{Html.Partial("_LoginError", Model);}
它将生成视图的相应部分。
在您的情况下,最常见的是添加模型错误并返回完整视图(必须具有ValidationSummary部分):
[HttpPost]
public ActionResult SingleSSOMPLogin(SSoStateModel model)
{
//Check the Code with SP providers and Authorization server.
if(model.SAMLAssertion.validMPData)
{
return RedirectToAction("SSOServiceMP" , "SAML");
}else
{
//Error message processed.
ModelState.AddModelError("error", SSOState.SAMLAssertion.errorMessage);
return View(model);
}
}
如果要使用部分视图,则必须从javacript ajax调用中调用它,并将响应插入页面中。 使用jQuery或多或少都像这样:
$.ajax({ url: <partial view url>,
type: 'GET',
success: function (result) {
$(updateSelector).hide().html(result).effect("fade", "fast");
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.