如何将Javascript字符串数组发送到控制器并呈现PartialView

如何将Javascript字符串数组发送到控制器并呈现PartialView,javascript,ajax,jquery,asp.net-ajax,Javascript,Ajax,Jquery,Asp.net Ajax,我有这个问题 我有一个JavaScript数组,如下所示: checkedItems={“1000”、“1001”、“1002”} 我需要把这个数组发送到C#控制器 当控制器完成此数组的工作时,返回PartialView 将呈现局部视图 我什么都试过了,但都没用 这是我的Javascript: function getAllCheckedFirsts() { var postIds = { data: [] }; var i = 0; $("

我有这个问题

  • 我有一个JavaScript数组,如下所示:

    checkedItems={“1000”、“1001”、“1002”}

  • 我需要把这个数组发送到C#控制器

  • 当控制器完成此数组的工作时,返回PartialView
  • 将呈现局部视图
我什么都试过了,但都没用

这是我的Javascript:

function getAllCheckedFirsts()
{
    var postIds = {
        data: []
    };

    var i = 0;
    $(":checked[id$='-first']").each(function (){
        var id = $(this).attr("id");
        var words = id.split("-");
        postIds.data.push(words[0]);
        i++;
    });

    $.post("/Home/getInfoAboutChecked", postIds);
}
这是我的控制器:

[HttpPost]
public PartialViewResult getInfoAboutChecked(string[] data)
{
    List<EntityModel> model = new List<EntityModel>();
    if (data.Length != 0)
    {
        int id = 0;
        WSEntityInfo entity;
        WSPropertyInfo[] fids;
        foreach (var e in data)
        {
            id = Convert.ToInt32(e);
            entity = WSConnect.getEntityInfo(id);
            fids = WSConnect.getAllFidsAsWSPropertyInfo(id);
            model.Add(new EntityModel(entity, fids));
        }               
    }
    return PartialView("_EntitiesView",model);
}
[HttpPost]
public PartialViewResult getInfoAboutChecked(字符串[]数据)
{
列表模型=新列表();
如果(data.Length!=0)
{
int id=0;
WSEntityInfo实体;
WSPropertyInfo[]fids;
foreach(数据中的var e)
{
id=转换为32(e);
实体=WSConnect.getEntityInfo(id);
fids=WSConnect.getAllFIDSAWSPropertyInfo(id);
添加(新实体模型(实体,fids));
}               
}
返回PartialView(“实体视图”,模型);
}
但控制器中的数据仍然为空 有什么问题?还有一个问题,在哪里以及如何定义html中呈现的位置。
感谢您的帮助

也许有更好的方法可以做到这一点(我对JavaScript还比较陌生),但碰巧昨晚我编写了一个函数式的方法来做到这一点:

var opts = "";
$('#myForm input:checked').each(function (i, elem) {
    opts += this.value + ",";
});
var ajaxUrl = myUrl + "&opts=" + opts;
在控制器中,我需要一个参数,
stringops
。在控制器中,我在“,”上拆分字符串以获得各个值

更新

您的帖子可以如下方式更新HTML:

$.post("/Home/getInfoAboutChecked", postIds, function(data) {
  $('#idOfDivWhereResultShouldGo').html(data);
});
您可以使用
@Url.Action来呈现链接,以便将home作为控制器,将其他部分作为Action

$.post("@Url.Action("getInfoAboutChecked", "Home")", JSON.stringify(postIds.data));
您的控制器需要一个字符串数组,您要发送的是一个具有字符串数组属性的对象

还可以使用发送一个简单的对象并序列化它,但不能使用数组,因此必须使用
JSON。stringify

为什么要定义
i
?在发布之前是否检查了
postIds
的值?在postIds中是对象,它有数据:array[1]或3或其他什么,为什么?但我需要发送整个数组,并在控制器中处理数组的每个索引,并根据结果返回部分视图,但现在我不明白我和elemcan是什么,你能给我发送命令,用ajax调用将选项发送到控制器吗?工作得很好,但我如何定义将在哪里包含部分视图(渲染)?更新以显示如何使用PartialView的输出更新
。您是指$(某物)。load(…)?@Url.Action仅在.cshtml文件中有效。更好的做法是将JavaScript放在一个单独的.js文件中,因为浏览器可以缩小并缓存该文件。不起作用,你确定用括号括起来吗?我已经包括了json2.js:(您能否验证json的内容/类型是否正在发送到server@ParvSharma:除非另有规定,否则默认内容类型为
'application/x-www-form-urlencoded;charset=UTF-8'
。如果要发送Json并指定匹配的内容类型,请使用
$.ajax({type:'POST',url:'/Home/getInfoAboutChecked',content type:'application/json;charset=utf-8'})
@user2080814:不太确定
$如何工作。getJSON
将使用
HttpPost
属性修饰动作方法,从而使
GET
请求无效。
$.post("@Url.Action("getInfoAboutChecked", "Home")", JSON.stringify(postIds.data));