0

我有这个问题。

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

    checkItems={"1000","1001","1002"}

  • 我需要将此数组发送到 C# 控制器

  • 当控制器完成此数组的工作时,返回 PartialView
  • 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);
}

但是控制器中的数据仍然是 NULL 有什么问题?还有一个问题,我在哪里以及如何定义 html 中的渲染位置。感谢帮助

4

2 回答 2

1
$.post("/Home/getInfoAboutChecked", JSON.stringify(postIds.data));

并且您可以使用@Url.Action to渲染链接,因此假设 home 作为控制器,另一部分作为操作

$.post("@Url.Action("getInfoAboutChecked", "Home")", JSON.stringify(postIds.data));

您的控制器需要一个字符串数组,而您要发送的是一个对象,该对象的属性是一个字符串数组,
也使用$.post您可以发送一个简单的对象并对其进行序列化,但不能发送一个数组,因此您必须使用JSON.stringify

于 2013-02-23T21:27:42.360 回答
0

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

var opts = "";
$('#myForm input:checked').each(function (i, elem) {
    opts += this.value + ",";
});
var ajaxUrl = myUrl + "&opts=" + opts;

在控制器中,我期望一个参数,string ops. 在控制器中,我将字符串拆分为“,”以获取各个值。

更新

您的帖子可以像这样更新 HTML:

$.post("/Home/getInfoAboutChecked", postIds, function(data) {
  $('#idOfDivWhereResultShouldGo').html(data);
});
于 2013-02-23T21:24:38.603 回答