У меня есть проект с несколькими страницами Razor. Первый - это вход в систему, где при отправке я вызываю этот метод.
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");
}
}
}
Затем переходим на страницу cs html CardPage, где вызывается этот метод OnGet.
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;
}
}
Это прекрасно работает, он перемещает идентификатор на следующую страницу, и я могу делать то, что мне нужно на этой странице. Но когда я пытаюсь сделать то же самое на CardPage с помощью этого метода OnPost. Этот OnPost вызывается из метода AJAX.
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 });
}
И этот метод OnGet
public void OnGetBuild(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 = ParseCardsSelected(cards);
}
string slotHTML;
int slotID = 1;
// create the rows of the pyramid and insert its slots
for (int currentRowNumber = 1; currentRowNumber <= MAX_ROWS; currentRowNumber++)
{
slotHTML = "";
for (int n = 1; n <= currentRowNumber; n++, slotID++)
{
// generates slot HTML and assigns an unique ID to each slot
slotHTML += string.Format(CARD_SLOT_HTML, slotID);
}
Rows += string.Format(SLOT_ROW_HTML, currentRowNumber, slotHTML);
}
Rows = new string(Rows.Where(c => !char.IsWhiteSpace(c) || c.Equals(' ')).ToArray());
}
Метод вызывается и выполняется, затем переходит на страницу cs html, где У меня есть настроенная модель. Все это выполняется правильно, но страница не загружается в браузере . Я искал несколько часов подряд, чтобы найти решение, но я не могу найти ничего с подобной проблемой. У меня есть временное решение, взяв URL, который должен быть загружен, и загрузив его вручную, и это работает таким образом.
Напомним, первые два метода работают, вторые два метода не работают. Во второй последовательности методы вызываются в OnGet, но страница не загружается в представление. При вводе URL-адреса вручную, страница загружается в представление правильно. Войдите -> CardPage работает, CardPage -> HierarchyPage не работает.
Я обновлю этот вопрос с большим количеством кода, если это необходимо.