Поскольку это страница Razor, когда вы делаете:
@{Session["Clinician"] = "diag"};
, она будет выполнена до того, как страница будет отображена в браузере. Таким образом, при загрузке страницы выполняется следующее на стороне сервера в последовательности:
@{Session["Clinician"] = "opa"};
@{Session["Clinician"] = "ca"};
@{Session["Clinician"] = "diag"};
Вопреки вашим ожиданиям, они не выполняются при нажатии насоответствующая сетка, так как это чисто интерактивное событие на стороне клиента.
Я предлагаю вам заменить "@ {Session [" Clinician "] =" ... "};"с помощью ajax-вызова для нового действия контроллера, который устанавливает строку в сеансе. Так что-то вроде этого:
JavaScript:
function Session()
{
}
Session.SetString = function (key, value)
{
$.post("/Home/SessionString?key=" + key + "&value=" + value);
};
Session.GetString = function (key, successCallback)
{
$.get("/Home/SessionString?key=" + key, null, function (data, textStatus, jqXHR) { successCallback(data) });
};
$('body').on('click', '#clinician-appointments>tbody>tr>td:not(:last-child):not(:first-child)', function () {
var id = $(this).closest("tr").children("td.grid__col--id").find("[name=patient-link]").text().trim();
Session.SetString("Clinician", "opa");
location.href = "@Url.Action("Summary", "Patient")" + "/" + id;
});
Контроллер (для .NET Core):
/// <summary>
/// Sets a value in the user's session.
/// </summary>
/// <param name="key">The key for the value.</param>
/// <param name="value">The value.</param>
[HttpPost]
public IActionResult SessionString(string key, string value)
{
HttpContext.Session.SetString(key, value);
return new JsonResult(null);
}
/// <summary>
/// Get a value from the user's session.
/// </summary>
/// <param name="key">The key for the value.</param>
/// <returns>The value.</returns>
[HttpGet]
public IActionResult SessionString(string key)
{
string value = HttpContext.Session.GetString(key);
return new JsonResult(value);
}
}