型号:

public class From
        {
            public DateTime from { get; set; }
            public DateTime to { get; set; }

        }

控制器:

public MediaViewModel DashboardMediaByDate([FromBody] From y)
        { // some logic }

视图:

<script>

    $(function () {
        // Get value on button click and show alert
        $("#myBtn").click(function () {
            var from =  {
                from: $("#from").val(), to: $("#to").val()
            };
            alert(from.from);
            var y = JSON.stringify(from);

            $.ajax({
                type: "POST",
                data: y,
                dataType: 'json',

                url: "/Queues/DashboardMediaByDate",
                contentType: "application/json"
            }).done(function (res) {
                alert(res);
            });
        });

    });
   

</script>

当我调试来自浏览器的请求时:

Request Header

What I received in 控制器:

Method Parameter
How can I send the object to controller from view model ?

提前谢谢,

推荐答案

您可以根据需要使用以下AJAX次通话来获取数据:

AJAX:

<script>
    $(function () {
        // Get value on button click and show alert
        $("#myBtn").click(function () {
        
            var from =  {
                from: $("#from").val(), to: $("#to").val()
            };
            
            alert(from.from);
            
            $.ajax({
                type: "POST",
                data: {'json': JSON.stringify(from)},
                dataType: 'json',
                url: "/Queues/DashboardMediaByDate"
            }).done(function (res) {
                alert(res);
            });
        });
    });
   
</script>

还有你的Controller种方法:

using System.Web.Script.Serialization;


[HttpPost]
public JsonResult DashboardMediaByDate(string json)
{
        MediaViewModel myModel = new MediaViewModel();
        var serializer = new JavaScriptSerializer();
        dynamic jsondata = serializer.Deserialize(json, typeof(object));

        //Get your variables here from AJAX call
        var from  = Convert.ToDateTime(jsondata["from"]);
        var to  = Convert.ToDateTime(jsondata["to"]);
        
        //Your logic

        return Json(new {myModel=myModel});
}

与原始通话的更改:

  1. AJAX通话中删除contentType
  2. Controller方法中添加了[HttpPost]属性
  3. 删除[FromBody]属性,将数据作为JSON字符串获取
  4. data更改为发送JSON字符串,而不是Model字符串

一旦您将数据获取为JSON字符串,就可以根据需要将其反序列化为Model struct .当我的Model没有很多属性时,我通常使用这种方法.

您的功能使用AJAX,这通常用于更新页面的一部分,而无需重新加载整个页面.如果您想在POST方法中用ModelController重定向到Model,那么不要使用ajax.或者,如果您知道要向返回的视图添加什么,则处理成功回调并更新DOM.

您可以在AJAX中的success方法中访问上述Model,如下所示:

success: function(data) {
    //Get your model here
    console.log(data.myModel);
}

Jquery相关问答推荐

JQuery DateTimePicker-在 Select 中抓取星期几

逐个交换图像

将元素附加到每个函数 jQuery

jQuery找到最近的匹配元素

jQuery 时间 Select 器

通过 .push() 方法向对象添加项目

jQuery / Ajax - $.ajax() 将参数传递给回调 - 使用好的模式?

jQuery 的 ajax 默认超时值是多少?

如何在 Backbone.js - Backbone.sync 或 jQuery.ajax 中保存整个集合?

Codemirror 编辑器在单击之前不会加载内容

Select 除第一个之外的所有子元素

将字符串true和false转为布尔值

在 jQuery UI 自动完成上没有检测到结果

JQuery - 如何根据值 Select 下拉项

带有 jQ​​uery 的饼图

jQuery 追加淡入

变量首字母大写

使用 jQuery 获取鼠标单击图像的 X/Y 坐标

javascript,是否有像 isArray 这样的 isObject 函数?

jQuery .val 更改不会更改输入值