C# 通过Ajax更新C变量?
我有一个充满帖子的页面,在呈现之前我会对这些帖子进行排序 现在,我已经创建了一个下拉列表,以便用户可以按最新或最旧的帖子进行排序。 唯一的问题是我不知道如何通过Ajax更新服务器端变量C# 通过Ajax更新C变量?,c#,asp.net,.net,ajax,asp.net-mvc,C#,Asp.net,.net,Ajax,Asp.net Mvc,我有一个充满帖子的页面,在呈现之前我会对这些帖子进行排序 现在,我已经创建了一个下拉列表,以便用户可以按最新或最旧的帖子进行排序。 唯一的问题是我不知道如何通过Ajax更新服务器端变量 @{ var SortSelected = ""; var sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).Reverse().To
@{
var SortSelected = "";
var sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).Reverse().ToList();
if (SortSelected == "Most recent")
{
sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).Reverse().ToList();
}
else if (SortSelected == "Oldest")
{
sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).ToList();
}
}
我已经删除了其他与使其更干净无关的代码
这是我的帖子代码,这是Razorhtml
<div class="AnimatedLabel">
<select name="contact" class="tm-md-12">
<option id="hide-selector-dropdown" value=""></option>
@foreach (var item in FilterTypes)
{
<option value="@item">@item</option>
}
</select>
<label for="contact">Sort by</label>
<span class="tm-icon-arrow--right" id="selector-dropdown-arrow"></span>
</div>
我就是这么做的-
<script>
$('select').on('change', function () {
SortSelected = this.value;
});
</script>
但它并没有更新值,有人告诉我,因为它是服务器端的。
我知道人们可能会因为这个问题而责骂我,但我不知道还有什么其他的解决办法,所以任何帮助都是非常好的
我对.net/c没有多少经验
谢谢 您可以使用ajax在服务器端调用web方法。
使用该方法更新服务器端的变量好的,所以我只想向您展示如何使用AJAX实现类似的功能。据我所知,您希望根据下拉列表中用户的选择对帖子列表进行排序。请参考下面的代码片段,并告诉我您是否能够获得有关需求的所需信息:
<script>
$('select').on('change', function () {
//SortSelected = this.value;
//First get the text of the selected item
var selectedText=$('#hide-selector-dropdown :selected').text();
//Now generate your JSON data here to be sent to the server
var json = {
selectedText: selectedText
};
//Send the JSON data via AJAX to your Controller method
$.ajax({
url: '@Url.Action("ProcessMyValue", "Home")',
type: 'post',
dataType: "json",
data: { "json": JSON.stringify(json)},
success: function (result) {
//Show your list here
if (data.success) {
console.log(data.sortedArticles);
}
else {
console.log("List empty or not found");
}
},
error: function (error) {
console.log(error)
}
});
});
</script>
您的控制器看起来像:
using System.Web.Script.Serialization;
[HttpPost]
public ActionResult ProcessMyValue(string json)
{
var serializer = new JavaScriptSerializer();
dynamic jsondata = serializer.Deserialize(json, typeof(object));
//Get your variables here from AJAX call
var SortSelected= jsondata["selectedText"];
//Do something with your variables here. I am assuming this:
var sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).Reverse().ToList();
if (SortSelected == "Most recent")
{
sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).Reverse().ToList();
}
else if (SortSelected == "Oldest")
{
sortedArticles = ListOfPosts.OrderBy(x => x.GetPropertyValue<DateTime>("articleDate")).ToList();
}
return Json(new { success = true, sortedArticles }, JsonRequestBehavior.AllowGet);
}
不能更改服务器变量值,但可以使用此值刷新表
<script>
$('select').on('change', function () {
$.get('/Url' , {sortBy:this.value}).done(function(result){
$('#yourTable').html(result);
}).fail(function(){
alert('Error !');
});
});
</script>
目前在你的js代码中,你根本没有使用任何类型的ajax。你为什么不在这里使用Html助手?@Izzy我不知道如何使用ajax,我想要一些关于如何在可能的情况下修改该变量的指针或指示,很抱歉,我只是一个新手。看看这个问题,这是一个很好的提示谢谢,所以我猜当选择值改变时,改变1个值并不像我预期的那么简单。这更多的是一个注释而不是一个答案。@Yogendra我不能接受这个作为答案,解释会很好。非常感谢你的帮助-我需要把它放进它自己的不同文件吗?那么,我不能直接把它放进我正在使用的cshtml文件中?谢谢。@Andrew你可以把它放在你的.cshtml文件中。只是不是控制器位,我已经为它创建了一个控制器。但是管理员抱怨说它不知道ListOfPosts是什么?@Andrew是的,我想你是在声明从某处获取ListOfPosts的逻辑?@Andrew你能参加聊天讨论吗?