【问题标题】:Update C# variable via Ajax?通过 Ajax 更新 C# 变量?
【发布时间】:2019-12-20 20:46:41
【问题描述】:

我有一页满是帖子,我在渲染之前对这些帖子进行了排序。

现在我创建了一个下拉列表,以便用户可以按最新或最旧对帖子进行排序。 唯一的问题是我不知道如何通过 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();
        }
   }

我已经删除了其他无关的代码以使其更清晰。

这是我的帖子代码,这是 Razor(html)

 <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>

但它没有更新值,我被告知因为它是服务器端的。 我知道人们可能会因为这个问题而烤我,但我不知道任何其他解决方案,所以任何帮助都会很棒!

我对@9​​87654325@没有太多经验 谢谢!

【问题讨论】:

  • 目前在你的 js 代码中你根本没有使用任何类型的 ajax
  • 你有什么理由不在这里使用 Html 助手吗?
  • @Izzy 我不明白如何使用 Ajax,如果可能的话,我想要一些关于如何修改该变量的指针或任何指示,对不起,我只是这一切的新手。
  • 看看this的问题,这是一个很好的指针
  • 谢谢,所以我猜我在选择值改变时的预期改变1的值并不像我预期的那么简单。 span>

标签: c# asp.net .net ajax asp.net-mvc


【解决方案1】:

您无法更改服务器变量值,但您可以使用它来刷新您的表格。

<script>
     $('select').on('change', function () {
            $.get('/Url' , {sortBy:this.value}).done(function(result){
             $('#yourTable').html(result);
            }).fail(function(){
                alert('Error !');
            });
        });
    </script>

【讨论】:

    【解决方案2】:

    好的,我只是想向您展示如何使用 AJAX 实现这样的目标。据我了解,您希望根据您拥有的下拉列表中用户的选择对您的帖子列表进行排序。请参考下面的代码 sn-p 并让我知道您是否能够根据您的要求得到您想要的:

    <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);
    }
    

    【讨论】:

    • 非常感谢 - 我需要把它放到它自己的不同文件中,我不能把它转储到我正在使用的 cshtml 文件中吗?谢谢。
    • @Andrew 您可以将&lt;script&gt; 部分放入您的 .cshtml 文件中。
    • 只是不是控制器位,我已经为它创建了一个控制器。但是控制器抱怨它不知道ListOfPosts是什么?
    • @Andrew 是的,我假设您正在声明从某个地方获取 ListOfPosts 的逻辑?
    • @Andrew 你能来聊天讨论吗?
    【解决方案3】:

    您可以使用 ajax 在服务器端调用 web 方法。 使用该方法在服务器端更新变量

    【讨论】:

    • 这更像是一个评论而不是一个答案。
    • @Yogendra 我不能接受这个作为答案,解释会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2023-03-05
    相关资源
    最近更新 更多