Я новичок в Razor и частичках. По сути, моя общая потребность в том, чтобы иметь возможность обновлять таблицу, когда пользователь нажимает кнопку.
На данный момент я делаю то, что нажимаю кнопку, ajax-функция сначала вызывает метод для заполнения словаря обновленной информацией, а затем вызывает функцию, чтобы вернуть частичное представление, которое должно отображать эту информацию об обновлении. не вызывая обновления всей моей страницы.
Код Ajax
<script>
$(document).ready(function(){
$("#AddContactQue").click(function(e)
{
e.preventDefault();
var name = $('#contactName').val();
var role = $('#contactRole').val();
console.log(name+','+role);
$.ajax({
url: "AddApplication?handler=AddContactToQue",
type: "POST",
dataType: "json",
data: { name,role },
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function () {
alert("success");
},
complete: function () {
$('#contactsTB').load('/AddApplication?handler=AppPartial');
},
failure: function () {
alert("failure");
}
})
});
});
</script>
После завершения я делаю ajax-вызов, чтобы обновить мой частичный.
Из того, что я прочитал в Интернете, ajax preventDefault
должен предотвратить любые "обратные передачи", поэтому мои данные в моем коде не должны быть потеряны.
Проблема сейчас в том, что я заполняю свой словарь, а затем, когда он идет, чтобы обновить частичное, словарь является нулевым. Следовательно, часть возвращает пустую таблицу, в которой ничего нет.
Метод обновления информации
public void OnPostAddContactToQue(string name, string role)
{
Console.WriteLine("----------urlcount=-----"+appURLS.Count);
if(HttpContext.Session.GetString("selectedContact") == null)
{
string s = name + ",";
HttpContext.Session.SetString("selectedContact", s);
}
else
{
string l = HttpContext.Session.GetString("selectedContact");
l += name + ",";
HttpContext.Session.SetString("selectedContact",l);
}
if(HttpContext.Session.GetString("selectedContactRole") == null)
{
string s = role + ",";
HttpContext.Session.SetString("selectedContactRole", s);
}
else
{
string l = HttpContext.Session.GetString("selectedContactRole");
l += role + ",";
HttpContext.Session.SetString("selectedContactRole",l);
}
contactQue = HttpContext.Session.GetString("selectedContact");
contactRoleQue = HttpContext.Session.GetString("selectedContactRole");
List<string> cList = contactQue.Split(',').ToList<string>();
List<string> crList = contactRoleQue.Split(',').ToList<string>();
for(int i = 0; i < cList.Count; i ++)
{
appContacts.Add(cList[i],crList[i]);
}
PopulateTools();
Console.WriteLine(HttpContext.Session.GetString("selectedURLS"));
}
Метод GetPartial
public Microsoft.AspNetCore.Mvc.PartialViewResult OnGetAppPartial()
{
return new Microsoft.AspNetCore.Mvc.PartialViewResult{ViewName = "_AppPartial",ViewData = new Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<Dictionary<string,string>>(ViewData,appContacts)};
}
При нажатии OnGetAppPartial
словарь appContacts
становится пустым. Я не понимаю, почему для него задано значение NULL, поскольку preventDefault
должно остановить перезагрузку страницы.
_AppPartial.cshtml
@model Dictionary<string,string>
<table class="table table-striped">
<tbody>
@foreach(var s in Model)
{
<tr>
<td>
@Html.Raw(s.Key + " - " + s.Value)
</td>
</tr>
}
</tbody>
</table>
Я следовал https://www.mikesdotnetting.com/article/325/partials-and-ajax-in-razor-pages в качестве ссылки.