如何将视图中的 javascript 代码中的对象列表传递给控制器中的操作方法
Posted
技术标签:
【中文标题】如何将视图中的 javascript 代码中的对象列表传递给控制器中的操作方法【英文标题】:How to pass a list of objects from a java script code in a View to an action method in a controller 【发布时间】:2020-02-13 07:39:11 【问题描述】:我在 javascript 编程方面没有太多经验。我想将“视图”中的 javascript 代码中的对象列表传递给 MVC“控制器”中的操作方法。 这是我想要实现的目标——
MVC 模型和控制器:
Public Class Student
Public int Id get; set;
Public string Name get; set;
Public string Address get; set;
Public class StudentController : Controller
Public ActionResult Index()
// Read the data from database, create a list of “Student”
return View(“Display”, StudentList);
[HttpPost]
Public ActionResult OrderStudentList(List<Student> StudentList)
// Code to ascend/descend list
显示.cshtml
@model IEnumerable<Student>
// Code that displays student list
<button onclick="myFunction()">Student Name</button>
<script>
function myFunction()
var studentL = @Model.ToList();
$.ajax(
url: "@Url.Action("OrderStudentList ", "Student")",
type: "POST",
contentType: "application/json",
data: JSON.stringify( StudentList: studentL ),
success: function (response)
response ? alert("It worked!") : alert("It didn't work.");
);
</script>
如您所见,我将“学生”列表传递给名为“显示”的视图。此视图有一个名为“学生姓名”的按钮。单击该按钮时,我想将“Student”列表传递给“StudentController”中的“OrderStudentList”操作方法,它将按升序/降序排列列表。但是当我运行代码时,我从来没有在“OrderStudentList”方法中得到任何值。
这是我迄今为止尝试在上述代码中分配数据值的方法
data:’@Html.Raw(Model.ToList())’
data: @Html.Raw(Json.Encode(Model.ToList()));
Converted a list to an array and tried to copy each element of a list
individually to an element of javascript array as follows
var arrayJs = [];
for(var i=0; i<= @Model.Count(); i++)
arrayJs.push(@Model.ElementAt(i));
But it gives the syntax error with the “i does not exist in
the current context”.
Created a ViewModel with Student list as a property
Class StudentList
Public List<Student> StudentList get; set;
Tried passing an instance of a viewModel as a JSON object to action
method “OrderStudentList”.
没有任何效果。如果有人提供帮助,我将不胜感激。 谢谢
【问题讨论】:
你试过用字符串引号包裹你的data
对象吗? data: 'JSON.stringify( StudentList: studentL )',
如果我这样做,点击按钮后什么都不会发生。
【参考方案1】:
我不太确定你希望这条线做什么:
var studentL = @Model.ToList();
但无论如何,您需要立即将模型转换为 JSON,您的 Javascript 函数需要如下所示:
function myFunction()
$.ajax(
url: "@Url.Action("OrderStudentList", "Student")",
type: "POST",
contentType: "application/json",
data: '@Html.Raw(JsonConvert.SerializeObject(Model.ToList()))',
success: function (response)
response ? alert("It worked!") : alert("It didn't work.");
);
并且您的 Action 方法需要具有以下签名:
[HttpPost]
Public ActionResult OrderStudentList(List<Student> model)
// Code to ascend/descend list
【讨论】:
非常感谢John M先生。这解决了我的问题。【参考方案2】:<button onclick="myFunction()">Student Name</button>
//这是使用 $ 语法必须包含的 jquery。它是可用的 //在您的项目目录中,您只需检查并更新以下行。
<script type="text/javascript">
function myFunction()
var studentL = @Html.Raw(Json.Encode(Model));
$.ajax(
url: "@Url.Action("OrderStudentList", "Student")",
type: "POST",
contentType: "application/json",
data: JSON.stringify( StudentList: studentL ),
success: function (response)
response ? alert("It worked!") : alert("It didn't work.");
);
【讨论】:
我用列表和数组试过这个。在运行时, var studentArr = @Model.ToArray() 行变为: var studentArr = Student[];并抛出错误,“Javascript 严重错误,语法错误”以上是关于如何将视图中的 javascript 代码中的对象列表传递给控制器中的操作方法的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的视图的 javascript 访问我的代码隐藏文件中的 JsonResult 变量?剃刀页面。 C#
如何将 firebase 函数提取到 Swift 中的对象?
如何将javascript绑定到MVC5视图中创建的表中的checkboxes和datetimepicker
如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?
如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript