如何在ASP.NET MVC專案中,判別會員成功登入跳出想要的資料,而不是開啟一個新的網頁
敘述若有不清楚的地方可以再提出
是要用什麼方法才正確,有參考資料提供嗎?
先謝謝各位了
補充:就是類似帳號登入後,可以自動出現他的學生課表,而不是還要寫一個超連結讓使用者去 點連結導過去,希望登入後可以直接顯示下面第三張圖的資料,資料是要在第二張顯示
使用表單送出的方式進行驗證,可以在後端寫:
return RedirectToAction(actionName, controllerName);`
若是使用Ajax(jQuery):
$.post(
apiUrl,
postData,
function(result) {
if(result.isSuccess) {
document.location.href = targetURL;
} else {
// other...
}
},
"json"
);
看得出來你已經寫了第二張圖和第三張圖的程式(以下簡稱 p2,p3)
有兩個方法:
1.把登入成功之後 跳轉/顯示到 p2
改成 p3
2.把 p3 的程式
貼到 p2
補充:就是類似帳號登入後,可以自動出現他的學生課表,而不是還要寫一個超連結讓使用者去 點連結導過去,希望登入後可以直接顯示下面第三張圖的資料,資料是要在第二張顯示
有個東西叫 redirect
https://jeffprogrammer.wordpress.com/2016/05/18/asp-net-mvc-redirect-to-view/
還有一個更簡單的方法,在前端HTML裡加個
<% Response.WriteFile("userinfo.aspx"); %>
加在哪裡你自己看著辦,這是我的網站上的截取的
不用改什麼ajax也不用什麼redirect也不會有任何跳轉或postback更不用vue或jquery,單MVC就可以放心服用
<%@ Page Language="C#" AutoEventWireup="true" Debug="true" CodeFile="Default.aspx.cs" Inherits="costctrl_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>網頁網頁網頁</title>
<link href="main.css" rel="stylesheet" />
</head>
<body>
<!-- .....這是你的網頁前端內容,我省略10001個字因為我看不見.... //--->
<table>
<tr>
<th>個人資料</th>
</tr>
<tr>
<td>
<% Response.WriteFile("userinfo.aspx"); %>
</td>
</tr>
</table>
</body>
</html>
如果你的慣用語言是VB或其他,請自己改一下語法,這是C#的
@using (Html.BeginForm("Index", "Login", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
}
BeginForm 只需要改成 Index(ActionName) Login(ControllerName)
假設P3 是 ClassController 的 Index2(ActionName)
只要在 Login View BeginForm 改成 Html.BeginForm("Index2", "Class") 即可
如果是同一個Controller Index指需要改成 Class
然後到Controller 的Action 後 自己再決定View路徑...
return RedirectToAction("Index2", "Class");
下面是我自己範例 Login 轉到 Home
LoginView部分
@{
/**/
ViewBag.Title = "XXX使用者登入";
}
@model WebApplication1.Models.Login.Login
<br>
<h3>XXXX管理系統</h3>
@if (ViewBag.ResultMessage != null)//判斷如果有訊息,則顯示。
{
//@Html.Label("info", (string)ViewBag.ResultMessage, new { @class = "text-info" })
<script type="text/javascript">
var message = @Html.Raw(Json.Encode(ViewBag.ResultMessage));
alert(message);
</script>
}
@using (Html.BeginForm("Index", "Login", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="container">
<hr />
<div class="" style="padding-top: 10px">
<div class="column">
@Html.LabelFor(model => model.UserID, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserID, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.UserID, "", new { @class = "text-danger" })
</div>
</div>
</div>
<br></br>
<div class="" style="padding-top: 10px">
<div class="column">
@Html.LabelFor(model => model.UserPwd, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserPwd, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.UserPwd, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="" style="padding-left: 40px;padding-top: 10px">
@Html.ValidationMessage("password", null, new { @class = "text-danger", style = "margin-left:10px;" })
</div>
<form>
<div style="padding-right: 70px; padding-top: 10px">
<input id="Submit" type="submit" value="確定" style="padding: 5px 20px;margin-left:10px;">
</div>
</form>
</div>
}
LoginController部分
[HttpPost]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public async Task<ActionResult> Index(Login postback){
try{
if (this.ModelState.IsValid){
var receivePassword = Login.Encoded(postback.UserPwd + postback.UserID);
if (await Login.LoginAccountAsync(postback.UserID, receivePassword))
{
Session["UserID"] = postback.UserID;
return RedirectToAction("Index", "Home");
}
else{
ModelState.AddModelError("password", "登入失敗,請確認登入資訊。");
return View("Index");
}
}
else {
return View("Index");
}
}
catch (Exception e){
ViewBag.ResultMessage = e.ToString();
return View();
}
}
HomeController 部分
public ActionResult Index()
{
return View();
}
我理解的是你需要登入後,跳轉到你需要的頁面,而不是首頁
return RedirectToAction("Index", "Home");
所以調整登入後的程式跳轉到你需要的頁面就可以了,
Index代表的是action,Home代表的是controller,一般就是預設的首頁,
因為你提供的畫面沒有連結,我不確定你需不需要帶參數,
不過是抓使用者資訊,理論上不需要,可以直接重登入資訊取