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

时间:2018-08-10 06:35:32

标签: c# jquery asp.net-mvc

如何将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:alert(btn); -正在打电话。我可以看到带有ID的警报窗口。但是,我无法在控制器中检索ID。

3 个答案:

答案 0 :(得分:1)

一个巧合的是,您使用“提取”一词来描述您要执行的操作。

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

1。 Ajax和REST:

使用http方法(发布或放置)使用ajax调用将变量值作为JSON推送到后端的REST api(路由)。 对于此选项,您可能想看看javascript的fetch function

2。 HTML表单

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


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

答案 1 :(得分: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);
}

如果要将从AJAX检索到的按钮ID传递到其他操作方法,则可以利用TempDataSession来完成。

答案 2 :(得分:0)

有很多方法可以完成您想要的工作,但是我会坚持使用您的代码示例。

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

使用代码,您可以将.ajax调用放入基于单击哪个按钮的操作的逻辑流程中。

nil

}

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

所以我的控制器看起来像

$("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
        });

    }

这是使用带有jquery的.ajax调用来处理从视图向控制器传递值的一种方法。

我首选的方式是使用Ajax.BeginForm的HTML帮助器。

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