将Javascript数组发送到控制器ASP.NET MVC
Sending a Javascript array to controller ASP.NET MVC
-
我试图将用户输入存储在javascript数组中,并通过ajax调用将其发送到控制器。但我在控制器的参数中得到的都是空的。这是代码:
<table class="table-condensed table-bordered table-striped table-responsive"> @foreach (var project in projects) { <tr> @foreach (var parameter in parameters) { <td> <input type="text" class="form-control remar" id=@i /> </td> i++; } </tr> } <tr> <td colspan=@(parameters.Count() + 1)> <button class="btn btn-primary pull-right" onclick="insert()">Submit Remarks</button> </td> </tr> </table> <script> function insert() { var remarks = []; jQuery(".remark").each(function () { remarks.push(jQuery(this).val()); }); $.ajax({ type: "POST", url: "@Url.Action("AddRemarksToEvaluationSheet", "Teacher")", data: JSON.stringify({ function_param: remarks }), contentType: "application/json; charset=utf-8;" }); } </script>
控制器:
public ActionResult AddRemarksToEvaluationSheet(string[] function_param)
{
return View();
}
有什么帮助吗?附言:以上代码已编辑。成功了!
这里有很多事情要做。。。
首先,不要给你的输入框提供数字的id——在这种情况下,看起来你甚至没有使用这个值。。。但如果你需要它,把值放入一个数据元素:
<input type="text" class="form-control remark" data-remark-id="@i" />
检索值时,需要获取值,而不是文本框本身:
var remarks = [];
jQuery(".remark").each(function() {
remarks.push(jQuery(this).val());
});
当对参数(如数组或复杂对象)进行任何奇怪的操作时,如果使用JSON而不是默认的URL编码,会让事情变得更好。
您还应该避免使用绝对路径,而是使用Url.Action
,这样无论您的应用程序相对于域位于何处,它都可以工作。
$.ajax({
type: "POST",
url: "@Url.Action("AddRemarksToEvaluationSheet", "Teacher")",
data: JSON.stringify({ function_param: remarks }),
contentType: "application/json; charset=utf-8;"
});
您可以接受字符串数组,而不是对象数组:
[HttpPost]
public ActionResult AddRemarksToEvaluationSheet(string[] function_param)
{
}
我有一种感觉,您一开始就没有得到数组中的注释。
如果您还没有,请使用允许您调试js的浏览器。如果使用Chrome,请右键单击->insect元素(或F12)。转到"Sources"选项卡,转到您的js文件并放置一个断点来查看comments数组的样子。
关于代码:
您似乎不需要输入上的id属性。更不用说数字id了。
要填充comments数组,请获取所有dom元素,这些元素具有您放置在所有输入上的类。对于每一个,推送数组中的值。
var remarks = [];
$(".form-control").each(function() {
remarks.push($(this).val());
});
您可以添加额外的代码来只添加有值的代码。
var remarks = [];
$(".form-control").each(function() {
if($(this).val().length){
remarks.push($(this).val());
}
});
ajax调用:
$.ajax({
type: "POST",
url: addRemarksUrl,
data: JSON.stringify({ function_param: remarks }),
contentType: "application/json; charset=utf-8;"
});
其中addRemarksUrl可以是在html中声明的全局变量。
还有其他获取网址的方法。看看这里:
如何将剃刀创建的Url发送到js文件
该用户提供了3种可能的解决方案:
- 全局js变量
- 自定义"数据-"属性
- 隐藏输入
相关文章:
- 将Javascript数组发送到控制器ASP.NET MVC
- 模型数据未通过窗体传播到控制器ASP.NET MVC4
- 从asp.net中的select标记中检索要查看的控制器中的值
- ASP.NET angularjs重定向到控制器的另一个视图
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- ASP.Net MVC 脚本无法使用控制器的默认操作 URL.使用控制器/操作 URL 也是如此
- 在 MVC 中将 HTML 表单数据从视图传递到控制器 ASP.NET
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- 如何将JavaScript文件路径映射到ASP.Net MVC控制器操作
- 如何将表单数据从jQuery获取到ASP.NET控制器
- ASP.NET Web API 控制器更新行
- 当 JSON.stringify 时,ASP.NET MVC 控制器参数的 JSON 为 null
- 是否可以使控制器返回模式窗口的数据?MVC5 ASP.NET
- 重定向到具有 jQuery asp.net 和传递模型的新控制器
- 我可以在 angle js asp.net mvc 中调用控制器中的路由提供程序服务吗?
- 在 MVC 中更改文本框日期时 asp.net 触发控制器代码
- 如何将 Javascript 文件对象 + 数据发送到 MVC 6 控制器 - ASP.NET 5.
- 如何从控制器 ASP.NET url 中删除哈希参数,以便返回到 Angular.JS 应用程序中的根 URI
- 使用ajax将模型发送到控制器asp.net mvc
- ajax请求动作控制器asp-mvc时出错