【问题标题】:How to pass jQuery variable value to c# mvc?如何将 jQuery 变量值传递给 c# mvc?
【发布时间】:2019-01-17 17:00:33
【问题描述】:

如何将 jQuery 变量值传递给 c# mvc?

我需要在后面的mvc代码中获取变量btn的值。

$('button').click(function () {
        var btn = $(this).attr('id');

        alert(btn);

        $.ajax({
            type: 'GET',
            url: '@Url.Action("ActionName", "ControllerName")',
            data: { id: btn },
            success: function (result) {
                // do something
            }
        });
    });

基于变量值(提交按钮(或)预览按钮),我的模型将对某些字段进行必需的验证。

在我的控制器中,我调用为

[HttpGet]
    public ActionResult ActionName(string id)
    {

        var vm = id;
        return View(vm);
    }

虽然,控制器中的 ActionResult 没有被调用。

Jquery:警报(btn); ——正在呼唤。我可以看到带有 id 的警报窗口。但是,我无法在控制器中检索 id。

【问题讨论】:

  • 你是什么意思“代码隐藏”? MVC 中没有类似 WPF 的代码。 C# 部分在服务器上运行,JS 部分在浏览器中运行。它们根本没有联系。将数据从 JS 部分(前端)传递到 C# 部分(后端)的唯一方法是请求(例如 AJAX)。
  • 您检查浏览器结果中的 url 是否正确?您的 sintaxys 调用似乎没问题,也许 Url.Action 没有创建正确的规则?检查。如果没有,请检查您的服务器 api 的 ruteconfig,可能那里有问题..
  • @JordiJordi,我无法关注你。我很抱歉。你能告诉我,我到底该怎么做
  • 你可以关注它,在浏览器中使用“查看源代码”或 var url = '@Url.Action("ActionName", "ControllerName")'; console.log(url);
  • 我到底要在源代码中寻找什么(查看源代码)?

标签: c# jquery asp.net-mvc


【解决方案1】:

您需要将jQuery.ajax()(或其缩写形式jQuery.get()/jQuery.post())与GET/POST 方法一起使用,并使用参数设置控制器操作以传递按钮ID:

jQuery(在 $(document).ready() 内)

$('button').click(function () {
    var btn = $(this).attr('id');
    var url = '@Url.Action("ActionName", "ControllerName")'; 
    var data = { id: btn };   

    // if controller method marked as POST, you need to use '$.post()'
    $.get(url, data, function (result) {
        // do something
        if (result.status == "success") {
            window.location = '@Url.Action("AnotherAction", "AnotherController")';
        }
    });
});

控制器动作

[HttpGet]
public ActionResult ActionName(string id)
{
    // do something
    return Json(new { status = "success", buttonID = id }, JsonRequestBehavior.AllowGet);
}

[HttpGet]
public ActionResult AnotherAction()
{
    // do something
    return View(model);
}

如果您想将检索到的按钮 ID 从 AJAX 传递到其他操作方法,您可以使用 TempDataSession 来执行此操作。

【讨论】:

  • [HttpGet] public ActionResult ActionName(string id) { // 做一些事情 var vm = id;返回视图(vm); }
  • 不,AJAX 不打算返回主视图。如果要返回主视图,请使用 RedirectToAction 到另一个返回主视图的控制器操作。
  • 能否请您查看我的帖子.. 我刚刚更新了帖子
  • 为什么Controller中的[HttpGet] ActionResult没有调用?
  • var vm = id; => id 是否包含任何值?如果您的 AJAX 回调有 success 响应,id 必须包含按钮 ID。如果 AJAX 有错误,GET 方法将不会调用(使用 error 块和 alert 来确保)。
【解决方案2】:

您使用“获取”这个词来描述您想要做的事情是一个很好的巧合。

jQuery 作为前端框架在浏览器中运行。这意味着它在客户端的计算机上运行。您的 MVC-C#-Code 位于服务器上。因此,如果要在这两台计算机之间发送数据,就需要使用http协议。

1。 Ajax 和 REST:

通过使用 http 方法(post 或 put)的 ajax 调用将您的变量值作为 JSON 推送到后端的 REST api(路由)。 对于此选项,您可能需要查看 javascript 的 fetch function

2。 HTML 表单

使用html form 将变量值存储在一个输入元素中。表单提交也会向后端执行 http post(默认情况下)请求,并将所有输入元素值用作 post 参数。


如果您对这个答案投了反对票,请您提供反馈意见,我可以做得更好。这是我可以从错误中学习并改进的唯一方法。谢谢。

【讨论】:

  • 为什么这个答案被否决了?肯定是正确的:\
  • Jquery 实际上是在获取 HTML 语法的值。 我正在尝试将 id 值传递给 Controller。
  • @goofyui 1st:jquery 获取服务器响应的任何内容。它可能是 HTML、JSON、XML,甚至是二进制文件(如果需要)。第二:在获取时将一些数据传递给服务器也很常见。第三:fetch函数,建议不是jQuery,它是纯JS。
  • 这不是答案,因为它不能解决 OP 的问题,但我可以看到在发布时它是相关且值得的。但是,OP 已经更新了这个问题,所以现在阅读它的任何人都会看到 OP 对其控制器进行 Ajax 调用,然后您解释他们需要对其控制器进行 Ajax 调用。如果你不看问题历史,这个答案看起来毫无意义,所以我希望你会得到反对,尽管有价值的信息显然有助于 OP。
【解决方案3】:

有很多方法可以完成您想做的事情,但我会坚持使用您的代码示例。

所以您需要做的是利用 jquery 中的 .ajax 调用将数据从您的视图发送到您的控制器。更多信息在这里:http://api.jquery.com/jquery.ajax/

使用您的代码,您可以将 .ajax 调用放入您的逻辑流中,根据单击的按钮执行操作。

$("button").click(function ()
{
    var btn = this.id;
    if (btn == "previewButton")
    {
        $.ajax({
            url: "/MyApp/MyAction",
            type: "POST",
            data: { btnId: btn },
            dataType: "json",
            async: true,
            cache: false
        }).success(function(data){
            // do something here to validate if your handling worked
        }).error(function(){
            // Do something here if it doesnt work
        });

    }

}

您会看到有一个 URL。在我的示例中,我选择 MyApp 作为我的控制器,并选择 MyAction 作为我们向其中发布值的控制器的方法。 ajax 调用发布具有 btnId 属性的 1 个参数。如果您需要传递更多数据,jquery 调用中的属性名称应与控制器内的操作方法签名的参数相对应。

所以我的控制器看起来像

public MyAppController : Controller 
{
    [HttpPost]
    public JsonResult MyAction(string btnId)
    {
        Debug.WriteLine("btnId: {0}", btnId);

        return Json(new{ ButtonId= btnId });
    }
}

这将是使用 .ajax 调用和 jquery 处理将值从视图传递到控制器的一种方法。

我的首选方法是使用 Ajax.BeginForm 的 Html 助手,这可能是您的另一种选择。

https://www.aspsnippets.com/Articles/ASPNet-MVC-AjaxBeginForm-Tutorial-with-example.aspx

【讨论】:

  • return Json(new{ ButtonId: btnId }); -- ButtonId 在我的控制器中抛出错误。我们没有变量名称为 ButtonId
  • 我尝试了 Post 和 Get。但是,我在控制器中的语法没有调用。你能看看我的帖子吗
  • 您正试图通过您无法执行的 javascript ajax 调用返回视图。如果您希望使用 ajax,我建议您在 ajax 调用的成功函数中进行重定向。像 window.href = url 之类的东西。我在我的手机上,所以手边没有准确的语法。此外,我在控制器代码中有错字,使用冒号而不是等号,更新了答案。
猜你喜欢
  • 2017-08-07
  • 2013-06-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 2012-02-21
  • 2016-10-13
  • 1970-01-01
  • 2014-12-02
相关资源
最近更新 更多