C# 通过ajax添加部分视图
在我的主布局中,我试图通过ajax添加一个登录部分视图,但是我不断得到“内部服务器错误”。我已经尝试过其他各种各样的解决方案,但运气不好 一切都很标准,我有我的HomeController和index.cshtml(使用layout.cshtml) 在布局中,文档准备好后,我使用ajax查看用户是否通过HomeController登录,如果返回值为false,我希望显示部分视图 函数showLoginPartial通过ajax尝试从LoginController获取部分视图时失败 “showLoginPartial()中的错误:内部服务器错误:-:错误” 我做错了什么 HomeController方法:C# 通过ajax添加部分视图,c#,jquery,ajax,asp.net-mvc,partial-views,C#,Jquery,Ajax,Asp.net Mvc,Partial Views,在我的主布局中,我试图通过ajax添加一个登录部分视图,但是我不断得到“内部服务器错误”。我已经尝试过其他各种各样的解决方案,但运气不好 一切都很标准,我有我的HomeController和index.cshtml(使用layout.cshtml) 在布局中,文档准备好后,我使用ajax查看用户是否通过HomeController登录,如果返回值为false,我希望显示部分视图 函数showLoginPartial通过ajax尝试从LoginController获取部分视图时失败 “showLo
public JsonResult IsUserLoggedIn()
{
return Json(new { result = (CurrentUser != null) }, JsonRequestBehavior.AllowGet);
}
布局jquery:
$(document).ready(function () {
checkLoggedIn();
function checkLoggedIn() {
$.ajax({
url: '@Url.Action("IsUserLoggedIn", "Home", new { })',
success: function (data) {
if (data.result == false) {
//Show the login partial view
showLoginPartial();
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error in checkLoggedIn(): " + errorThrown + " :-: " + textStatus);
}
});
}
function showLoginPartial() {
$.ajax({
url: '@Url.Action("LoginDisplay", "Login", new { })',
success: function (response) {
//add the partial view after #ib-container div
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//Error displays
alert("Error in showLoginPartial(): " + errorThrown + " :-: " + textStatus);
}
});
}
})
登录控制器:
public class LoginController : Controller
{
// GET: Login
[ChildActionOnly]
public ActionResult LoginDisplay()
{
return PartialView("_LoginDisplay");
}
public JsonResult UserLoggedOut()
{
return Json(new { result = Nuclei.Models.CurrentUserAccount.Instance.LoggedOut }, JsonRequestBehavior.AllowGet);
}
public JsonResult UserAutoAuthenticate()
{
bool l_result = false;
System.Threading.Thread.Sleep(3000);
return Json(new { result = l_result }, JsonRequestBehavior.AllowGet);
}
public JsonResult UserManualAuthenticate()
{
bool l_result = false;
System.Threading.Thread.Sleep(3000);
return Json(new { result = l_result }, JsonRequestBehavior.AllowGet);
}
public JsonResult SendUserCredentials()
{
bool l_result = true;
System.Threading.Thread.Sleep(3000);
return Json(new { result = l_result }, JsonRequestBehavior.AllowGet);
}
}
场地结构:
[编辑]
只是尝试通过RenderAction()添加局部视图,效果不错,但这不是我想要的,我肯定想使用ajax
@{ Html.RenderAction("LoginDisplay", "Login"); }
将其余的方法也添加到上面的LoginController中
_LoginDisplay.cshtml
<div id="login_layer_overlay">
</div>
<div id="login_layer">
<div id="MainLoginDiv">
<div id="LoginHeaderDiv" class="text-center">
<h3 id="LoginHeader" class="page-header" style="color:white;"> </h3>
</div>
<div id="Spinner" class="spinner">
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
<i><b></b></i><!--1--><i><b></b></i><!--2--><i><b></b></i><!--3--><i><b></b></i><!--4--><i><b></b></i><!--5--><i><b></b></i><!--6--><i><b></b></i><!--7--><i><b></b></i><!--8--><i><b></b></i><!--9--><i><b></b></i><!--10-->
</div>
<div id="ManualLogin" class="box" style="border: none;">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-group">
<label class="control-label" style="color:white;">Username</label>
@Html.TextBox("username", null, new { id = "username", @class = "form-control", @Value="us" })
</div>
<div class="form-group">
<label class="control-label" style="color:white;">Password</label>
@Html.TextBox("password", null, new { id = "password", @class = "form-control", @Value = "pwd" })
</div>
<div class="text-center" style="margin-top:40px;">
<input type="button" id="ManualLoginBtn" value="Sign in" class="btn btn-primary" />
<br />
<input type="button" id="AutoLoginBtn" value="Auto Authenticate" class="btn btn-default" />
<input type="button" id="ForgotLoginBtn" value="Forgot Credentials" class="btn btn-default" />
</div>
}
</div>
<div id="ForgotLogin" class="box" style="border: none;">
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-group">
<label class="control-label" style="color:white;">Email</label>
@Html.TextBox("email", null, new { id = "email", @class = "form-control", @Value = "jhjhblah" })
</div>
<div class="text-center" style="margin-top:40px;">
<input type="button" id="BackToLoginBtn" value="Back" class="btn btn-default" />
<input type="button" id="ForgotSubmitBtn" value="Submit" class="btn btn-primary" />
</div>
}
</div>
</div>
</div>
<script>
$(document).ready(function () {
var spinnerItems = $("#Spinner i b");
$("#MainLoginDiv").css("opacity", "1");
checkUserLoggedOut();
function checkUserLoggedOut() {
$.ajax({
//First need to check for logged off
url: '@Url.Action("UserLoggedOut", "Login", new { })',
success: function (data) {
if (data.result == false) {
showAutoAuthenticate();
}
else {
showManualForm();
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + errorThrown + " :-: " + textStatus);
}
});
}
function showAutoAuthenticate() {
$("#LoginHeader").text("Auto Authenticating");
$("#ManualLogin").css("opacity", "0");
setTimeout(function () { $("#ManualLogin").css("display", "none"); }, 550);
$("#Spinner").css("opacity", "1");
spinnerItems.each(function () {
$(this).addClass("spinAnimation");
})
$.ajax({
url: '@Url.Action("UserAutoAuthenticate", "Login", new { })',
success: function (data) {
if (data.result == false) {
//Switch to manual
//showForgotLogin();
showManualForm();
}
else {
//Remove login
$("#AutoLogin").css("opacity", "0");
spinnerItems.each(function () {
$(this).removeClass("spinAnimation");
})
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error in showAutoAuthenticate(): " + errorThrown + " :-: " + textStatus);
}
});
}
function showManualAuthenticate() {
$("#LoginHeader").text("Authenticating");
$("#ManualLogin").css("opacity", "0");
setTimeout(function () { $("#ManualLogin").css("display", "none"); }, 550);
$("#Spinner").css("opacity", "1");
spinnerItems.each(function () {
$(this).addClass("spinAnimation");
})
$.ajax({
url: '@Url.Action("UserManualAuthenticate", "Login", new { })',
success: function (data) {
if (data.result == false) {
//Switch to manual
//showForgotLogin();
showManualForm();
}
else {
//Remove login
$("#AutoLogin").css("opacity", "0");
spinnerItems.each(function () {
$(this).removeClass("spinAnimation");
})
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error in showManualAuthenticate(): " + errorThrown + " :-: " + textStatus);
}
});
}
function showForgottenProcessing() {
$("#ForgotLogin").css("opacity", "0");
setTimeout(function () { $("#ForgotLogin").css("display", "none"); }, 550);
$("#Spinner").css("opacity", "1");
spinnerItems.each(function () {
$(this).addClass("spinAnimation");
})
$.ajax({
url: '@Url.Action("SendUserCredentials", "Login", new { })',
success: function (data) {
if (data.result == false) {
//Switch to manual
showForgotLoginForm();
}
else {
//Go back to login
showManualForm();
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("Error in showManualAuthenticate(): " + errorThrown + " :-: " + textStatus);
}
});
}
function showManualForm() {
$("#Spinner").css("opacity", "0");
spinnerItems.each(function () {
$(this).removeClass("spinAnimation");
})
$("#ForgotLogin").css("opacity", "0");
setTimeout(function () { $("#ForgotLogin").css("display", "none"); }, 550);
$("#LoginHeader").text("Login");
$("#ManualLogin").css("display", "block");
$("#ManualLogin").css("opacity", "1");
}
function showForgotLoginForm() {
$("#Spinner").css("opacity", "0");
spinnerItems.each(function () {
$(this).removeClass("spinAnimation");
})
$("#ManualLogin").css("opacity", "0");
setTimeout(function () { $("#ManualLogin").css("display", "none"); }, 550);
$("#LoginHeader").text("Retrieve Credentials");
$("#ForgotLogin").css("display", "block");
$("#ForgotLogin").css("opacity", "1");
}
$("#AutoLoginBtn").click(function () {
showAutoAuthenticate();
});
$("#ForgotLoginBtn").click(function () {
showForgotLoginForm();
});
$("#BackToLoginBtn").click(function () {
showManualForm();
});
$("#ManualLoginBtn").click(function () {
showManualAuthenticate();
});
$("#ForgotSubmitBtn").click(function () {
showForgottenProcessing();
});
})
</script>
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
用户名
@TextBox(“username”,null,新的{id=“username”,@class=“form control”,@Value=“us”})
密码
@TextBox(“password”,null,new{id=“password”,@class=“form control”,@Value=“pwd”})
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
电子邮件
@TextBox(“email”,null,新的{id=“email”,@class=“form control”,@Value=“jhblah”})
}
$(文档).ready(函数(){
var spinnerItems=$(“#Spinner i b”);
$(“#MainLoginDiv”).css(“不透明度”、“1”);
checkUserLoggedOut();
函数checkUserLoggedOut(){
$.ajax({
//首先需要检查是否已注销
url:'@url.Action(“UserLoggedOut”,“Login”,new{}),
成功:功能(数据){
如果(data.result==false){
showAutoAuthenticate();
}
否则{
showManualForm();
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(“错误:+ErrorSprown+”:-:“+textStatus”);
}
});
}
函数showAutoAuthenticate(){
$(“#登录阅读器”).text(“自动验证”);
$(“手动登录”).css(“不透明度”、“0”);
setTimeout(函数(){$(“#ManualLogin”).css(“display”,“none”);},550);
$(“#微调器”).css(“不透明度”,“1”);
喷丝头项目。每个(功能(){
$(this.addClass(“spinimation”);
})
$.ajax({
url:'@url.Action(“UserAutoAuthenticate”,“Login”,new{}),
成功:功能(数据){
如果(data.result==false){
//切换到手动模式
//showForgotLogin();
showManualForm();
}
否则{
//删除登录名
$(“#AutoLogin”).css(“不透明度”,“0”);
喷丝头项目。每个(功能(){
$(this.removeClass(“spinimation”);
})
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(“showAutoAuthenticate()中的错误:“+ErrorSprown+”:-:“+textStatus”);
}
});
}
函数showManualAuthenticate(){
$(“#登录头”).text(“身份验证”);
$(“手动登录”).css(“不透明度”、“0”);
setTimeout(函数(){$(“#ManualLogin”).css(“display”,“none”);},550);
$(“#微调器”).css(“不透明度”,“1”);
喷丝头项目。每个(功能(){
$(this.addClass(“spinimation”);
})
$.ajax({
url:'@url.Action(“UserManualAuthenticate”,“Login”,new{}),
成功:功能(数据){
如果(data.result==false){
//切换到手动模式
//showForgotLogin();
showManualForm();
}
否则{
//删除登录名
$(“#AutoLogin”).css(“不透明度”,“0”);
喷丝头项目。每个(功能(){
$(this.removeClass(“spinimation”);
})
}
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
警报(“showManualAuthenticate()中的错误:“+errorshown+”:-:“+textStatus”);
}
});
}
函数showForgottenProcessing(){
$(“#放弃登录”).css(“不透明度”、“0”);
setTimeout(函数(){$(“#ForgotLogin”).css(“display”,“none”);},550);
$(“#微调器”).css(“不透明度”,“1”);
喷丝头项目。每个(功能(){
$(this.addClass(“spinimation”);
})
$.ajax({
网址:
[HttpGet]
public ActionResult LoginDisplay()
{
return PartialView("_LoginDisplay");
}
function showLoginPartial() {
$.ajax({
url: '@Url.Action("LoginDisplay", "Login")',
type: 'GET',
success: function (response) {
$('#ib-container').html(response);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//Error displays
alert("Error in showLoginPartial(): " + errorThrown + " :-: " + textStatus);
}
});
}