comment_list.inc': $pre .= $default_pre .= 'comment_list.inc.htm'; break; case 'message': $pre .= $default_pre .= 'message.htm'; break; case 'tag_list': $pre .= $default_pre .= 'tag_list.htm'; break; case 'tag': $pre .= $default_pre .= 'tag.htm'; break; case 'flag': $pre .= $default_pre .= 'flag.htm'; break; case 'my': $pre .= $default_pre .= 'my.htm'; break; case 'my_password': $pre .= $default_pre .= 'my_password.htm'; break; case 'my_bind': $pre .= $default_pre .= 'my_bind.htm'; break; case 'my_avatar': $pre .= $default_pre .= 'my_avatar.htm'; break; case 'home_article': $pre .= $default_pre .= 'home_article.htm'; break; case 'home_comment': $pre .= $default_pre .= 'home_comment.htm'; break; case 'user': $pre .= $default_pre .= 'user.htm'; break; case 'user_login': $pre .= $default_pre .= 'user_login.htm'; break; case 'user_create': $pre .= $default_pre .= 'user_create.htm'; break; case 'user_resetpw': $pre .= $default_pre .= 'user_resetpw.htm'; break; case 'user_resetpw_complete': $pre .= $default_pre .= 'user_resetpw_complete.htm'; break; case 'user_comment': $pre .= $default_pre .= 'user_comment.htm'; break; case 'single_page': $pre .= $default_pre .= 'single_page.htm'; break; case 'search': $pre .= $default_pre .= 'search.htm'; break; case 'operate_sticky': $pre .= $default_pre .= 'operate_sticky.htm'; break; case 'operate_close': $pre .= $default_pre .= 'operate_close.htm'; break; case 'operate_delete': $pre .= $default_pre .= 'operate_delete.htm'; break; case 'operate_move': $pre .= $default_pre .= 'operate_move.htm'; break; case '404': $pre .= $default_pre .= '404.htm'; break; case 'read_404': $pre .= $default_pre .= 'read_404.htm'; break; case 'list_404': $pre .= $default_pre .= 'list_404.htm'; break; default: $pre .= $default_pre .= theme_mode_pre(); break; } if ($config['theme']) { $conffile = APP_PATH . 'view/template/' . $config['theme'] . '/conf.json'; $json = is_file($conffile) ? xn_json_decode(file_get_contents($conffile)) : array(); } !empty($json['installed']) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . ($id ? $id . '_' : '') . $pre; (empty($path_file) || !is_file($path_file)) and $path_file = APP_PATH . 'view/template/' . $config['theme'] . '/htm/' . $pre; if (!empty($config['theme_child']) && is_array($config['theme_child'])) { foreach ($config['theme_child'] as $theme) { if (empty($theme) || is_array($theme)) continue; $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . ($id ? $id . '_' : '') . $pre; !is_file($path_file) and $path_file = APP_PATH . 'view/template/' . $theme . '/htm/' . $pre; } } !is_file($path_file) and $path_file = APP_PATH . ($dir ? 'plugin/' . $dir . '/view/htm/' : 'view/htm/') . $default_pre; return $path_file; } function theme_mode_pre($type = 0) { global $config; $mode = $config['setting']['website_mode']; $pre = ''; if (1 == $mode) { $pre .= 2 == $type ? 'portal_category.htm' : 'portal.htm'; } elseif (2 == $mode) { $pre .= 2 == $type ? 'flat_category.htm' : 'flat.htm'; } else { $pre .= 2 == $type ? 'index_category.htm' : 'index.htm'; } return $pre; } ?>How to post Javascript array to C# list of tuples ? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How to post Javascript array to C# list of tuples ? - Stack Overflow

programmeradmin1浏览0评论

I was wondering if anyone knew how to pass a Javascript array of objects to a MVC action method accepting an array of tuples.

Example:

The Javascript:

var objectArray = 
[
    { id: 1, value: "one" },
    { id: 2, value: "two" }
];

$.post('test',objectArray);

The MVC controller action:

public JsonResult Test((int id, string value)[] objectArray)
{
    return Json(objectArray != null);
}

Unfortunately the example I've given always returns false as the objectArray in the C# code is null.

I was wondering if anyone knew how to pass a Javascript array of objects to a MVC action method accepting an array of tuples.

Example:

The Javascript:

var objectArray = 
[
    { id: 1, value: "one" },
    { id: 2, value: "two" }
];

$.post('test',objectArray);

The MVC controller action:

public JsonResult Test((int id, string value)[] objectArray)
{
    return Json(objectArray != null);
}

Unfortunately the example I've given always returns false as the objectArray in the C# code is null.

Share Improve this question edited Jan 17, 2018 at 13:26 Mihai Alexandru-Ionut 48.5k14 gold badges105 silver badges132 bronze badges asked Jan 17, 2018 at 12:34 Rian MostertRian Mostert 7141 gold badge7 silver badges19 bronze badges 3
  • 2 Is there a reason you can't use a proper class? This isn't really what Tuples were designed for. – fdomn-m Commented Jan 17, 2018 at 12:36
  • 1 @freedomn-m No reason, just curiosity. – Rian Mostert Commented Jan 17, 2018 at 12:44
  • @freedomn-m, yes, tuples aren't designed for this. Also, model binding cannot map to one Tuple. – Mihai Alexandru-Ionut Commented Jan 17, 2018 at 13:23
Add a ment  | 

1 Answer 1

Reset to default 6

You cannot do this because like the error says: a tuple has no parameterless constructor, so the model binder can't instantiate it.

Also, you can read more about Model Binding.

One of the phrases said this:

In order for binding to happen the class must have a public default constructor and member to be bound must be public writable properties. When model binding happens the class will only be instantiated using the public default constructor, then the properties can be set.

You can use another approach:

First of all, you have to send the given array using JSON.stringify method.

JSON.stringify() turns a javascript object to json text and stores it in a string.

AJAX

objectArray = JSON.stringify({ 'objectArray': objectArray });
$.ajax({
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: 'POST',
    url: 'test',
    data: objectArray ,
    success: function () {          

    }
});

In your server-side method you have to pass a list of objects as parameter.

[HttpPost]
public void PassThings(List<Thing> objectArray )
{

}

public class Thing
{
    public int Id { get; set; }
    public string Value { get; set; }
}
发布评论

评论列表(0)

  1. 暂无评论