我有一个带有几个Razor页面的项目。第一个是在提交后我称之为此方法的日志。
2C
然后转到cshtml页面CardPage,在该页面上调用此OnGet方法。
public RedirectToPageResult OnPostLogin()
{
string salt; // grab the unique salt we stored on the database
string hashedPassword;
using (var conn = new SqlConnection(_config.GetConnectionString("UserDBContext")))
{
salt = conn.Query<string>(GetDBSalt(), new // grabs the salt from the database
{
@Email = Email
}).FirstOrDefault();
if (salt != null)
{
hashedPassword = PasswordHash.Hash(Password, Convert.FromBase64String(salt)); // hashes the password and salt to compare against the database password
}
else
{
hashedPassword = "";
}
var result = conn.Query<Guid>(CheckUserSql(), new
{
@Email = Email, // ditto below
@Password = hashedPassword // checks if the hashed password matches the password we have on the database
}).FirstOrDefault();
var resultString = result.ToString();
if (resultString != "00000000-0000-0000-0000-000000000000")
{
//Response.Redirect($"/CardPage/{resultString}");
return RedirectToPage("CardPage", "Card", new { id = resultString });
}
else
{
return RedirectToPage("LogIn");
}
}
}
这工作得很好,它将id移到下一页,我可以在此页面上做我需要做的事情。但是,当我尝试使用此OnPost方法在CardPage上执行完全相同的操作时。此OnPost是通过AJAX方法调用的。
public void OnGetCard(string id)
{
using (var conn = new SqlConnection(_config.GetConnectionString("UserDBContext")))
{
var cards = conn.Query<string>(GetUserSql(), new
{
@Id = id
}).FirstOrDefault();
this.HttpContext.Session.SetString("Id", id);
CardsSelected = cards;
}
}
这个OnGet方法
public RedirectToPageResult OnPost([FromBody] Cards cards)
{
var urlId = HttpContext.Session.GetString("Id");
var cardString = cards.cards;
using (var conn = new SqlConnection(_config.GetConnectionString("UserDBContext")))
{
conn.Execute(SetCardsSql(), new
{
@Cards = cardString,
@Id = urlId
});
}
return RedirectToPage("HierarchyPage", "Build", new { id = urlId });
}
该方法被调用并执行,然后转到在其中设置了模型的cshtml页面。所有这些都能正确执行,但是页面无法在浏览器中加载。我一直在搜寻数小时以寻找解决方案,但找不到任何类似问题。我有一个临时的解决方法,方法是获取应该加载的网址,然后手动加载它,这样工作。
概括地说,前两种方法有效,后两种方法无效。在第二个序列中,这些方法在OnGet中调用,但是页面未加载到视图中。手动输入url时,页面将正确加载到视图中。登录-> CardPage有效,CardPage-> HierarchyPage不起作用。如果需要,我将使用更多代码更新此问题。
答案 0 :(得分:0)
如果使用Ajax,则应重定向到另一页并在成功回调函数中从客户端传递参数:
$.ajax({
...
}).done(function (data) {
window.location.replace(data.redirectUrl);
})
服务器端将返回带有参数的Json结果:
public ActionResult OnPost([FromBody]Cards cards)
{
...
return new JsonResult(new { redirectUrl = Url.Page("HierarchyPage", "Build", new { id = urlId }) });
}