如何将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
- 将呈现局部视图
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));