【问题标题】:MVC: How do I set a C# static variable from within a javascript block?MVC:如何从 javascript 块中设置 C# 静态变量?
【发布时间】:2015-04-28 20:09:39
【问题描述】:

我有这个函数,我希望能够对静态类进行更改。

$("#DDLRegion").change(function () {

     var selectedItem = $(this).val();
     ViewBag.Region = selectedItem;
     @RegionSwitch.setRegion(ViewBag.Region);

     switch (selectedItem) {
        case 'Place':
           window.location.href = '@Url.Action("Index", "Place")'
           break;
        case 'Thing' :
           window.location.href = '@Url.Action("Index", "Thing")'
           break;
        case 'Region' :
           window.location.href = '@Url.Action("Index", "Region")'
           break;
        default:
           window.location.href = '@Url.Action("Index", "Place")'
           alert("Blarg");
           break;
     }
  });

有没有办法能够从 jQuery 脚本(我相信是)内部访问 C# 静态类?一般来说,我是 MVC 和 Web 开发的新手。也欢迎任何关于成为更好的开发人员的建议。

@RegionSwitch._currentRegion = selectedItem;

上述内容也不起作用,并在 Chrome 的 JavaScript 控制台中显示为 = selectedItem;

【问题讨论】:

  • 您需要发布到您的控制器以更改服务器端变量。谷歌 jQuery 帖子了解更多信息。
  • 您正在尝试从客户端更改服务器端对象,但这是行不通的。客户端 javascript 不知道任何服务器端对象,因此您必须将值发布到服务器,例如使用 Ajax 调用。

标签: c# jquery asp.net-mvc razor model-view-controller


【解决方案1】:

正如@BillCheng 和@Stephen 所说,您要做的是从jQuery 发出post 请求。

这就是你在 jQuery 上 implement a post request (Ajax) 的方式。

在 ASP.NET MVC 方面,无论输入是否为 Ajax,Action 的工作方式都是一样的。您只需要以与您的帖子参数匹配的方式实现您的操作参数。 Here 是一篇关于模型绑定的好文章。

【讨论】:

  • 所以我把这个帖子请求扔在这里,但我似乎无法让它工作。给出 500 错误(超级有用)。 $.ajax({ url: '/region/changeRegion', type: 'POST', data: selectedItem, dataType: 'String', success: function (data) { alert(data); }, error: function () { alert('Nope'); } });
【解决方案2】:

好的,所以我在查看 POST 请求后解决了我的问题。感谢@BillCheng、@Stephen 和@andrerpena 的建议。我将我的数据发布到一个控制器,然后它会执行我需要的所有很酷的 C# 操作。

javascript更改函数中的Ajax请求

     $.ajax({
        url: '/region/changeRegion',
        type: 'POST',
        data: { "selectedRegion": $(this).val() },
        dataType: 'text',
        success: function (data) {
           alert(data);
        },
        error: function () {
           alert('Nope');
        }
     });

还有一个控制器动作来处理字符串(js 称之为文本-_-)

  [HttpPost]
  public void ChangeRegion(string selectedRegion)
  {
     RegionSwitch._currentRegion = selectedRegion;
  }

对于将来遇到此问题的任何人,预期的参数名称需要与 ajax 请求中的名称匹配。

data: { "**selectedRegion**" : $(this).val() },
public void ChnageRegion(string **selectedRegion**)

也不要忘记将 url 与正确的控制器和操作相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 2018-08-18
    • 2011-05-08
    • 2015-11-17
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多