Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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
如何将jQuery变量值传递给c#mvc?_C#_Jquery_Asp.net Mvc - Fatal编程技术网

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

如何将jQuery变量值传递给c#mvc?,c#,jquery,asp.net-mvc,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")',

如何将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。

您使用“获取”一词来描述您要执行的操作,这是一个很好的巧合

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

1.Ajax和REST: 使用使用http方法(post或put)的ajax调用将变量值作为JSON推送到后端的RESTAPI(路由)。 对于此选项,您可能需要查看javascript的功能

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



如果你否决了这个答案,请你提供反馈,我可以做得更好。这是我从错误中学习和提高的唯一途径。谢谢。

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

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

1.Ajax和REST: 使用使用http方法(post或put)的ajax调用将变量值作为JSON推送到后端的RESTAPI(路由)。 对于此选项,您可能需要查看javascript的功能

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



如果你否决了这个答案,请你提供反馈,我可以做得更好。这是我从错误中学习和提高的唯一途径。谢谢。

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

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

控制器动作

[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传递到其他操作方法,可以利用
TempData
Session
来完成此操作。

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

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

控制器动作

[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传递到其他操作方法中,您可以利用
TempData
Session
来实现这一点。

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

因此,您需要做的是利用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调用中的属性名称应该与控制器中的actions方法签名的参数相对应

所以我的控制器看起来像

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

        return Json(new{ ButtonId= btnId });
    }
}
这将是使用jquery的.ajax调用处理从视图向控制器传递值的一种方法

我更喜欢的方法是使用Ajax.BeginForm的Html助手,这可能是您的另一个选择


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

因此,您需要做的是利用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调用中的属性名称应该与控制器中的actions方法签名的参数相对应

所以我的控制器看起来像

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

        return Json(new{ ButtonId= btnId });
    }
}
这将是使用jquery的.ajax调用处理从视图向控制器传递值的一种方法

我更喜欢的方法是使用Ajax.BeginForm的Html助手,这可能是您的另一个选择


你说的“代码隐藏”是什么意思?MVC中没有类似WPF的代码。C#部件在服务器上运行,JS部件在浏览器中运行。他们根本没有联系。从JS部件(前端)向C#部件(后端)传递数据的唯一方法是请求(例如AJAX)。您是否检查了浏览器结果中的url是否正确?您的sintaxys呼叫似乎正常,可能是Url。操作没有创建正确的rute?检查一下。如果没有,请检查服务器api的ruteconfig,