Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Ajax更新C变量?_C#_Asp.net_.net_Ajax_Asp.net Mvc - Fatal编程技术网

C# 通过Ajax更新C变量?

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

我有一个充满帖子的页面,在呈现之前我会对这些帖子进行排序

现在,我已经创建了一个下拉列表,以便用户可以按最新或最旧的帖子进行排序。 唯一的问题是我不知道如何通过Ajax更新服务器端变量

    @{
       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你能参加聊天讨论吗?