将js复杂数组传给mvc控制器,然后返回另一个视图

Posted

技术标签:

【中文标题】将js复杂数组传给mvc控制器,然后返回另一个视图【英文标题】:Pass js complex array to mvc controller, and then return another view 【发布时间】:2018-05-03 21:25:38 【问题描述】:

这和我之前的question有关。 我想知道,即使现在我试图发送一个更复杂的数组,我能否以相同的方式传递一个 JS 数组(与上一个问题中接受的答案一样):

如果是,那么如何?在控制器中接收时获取空值。 这是我的模型:

public class QuestionModel

    public bool Choice  get; set; 
    public List<object> ChoiceQuestions  get; set;  //can i use List<object>?
    public int Id  get; set; 
    public string Question  get; set; 
    public bool Short  get; set; 
    public object ShortQuestion  get; set;  //here aswell - can I use object?
    public string Type  get; set; 

甚至不确定我是否可以重用 js 代码将数据发送到答案中给出的控制器。如果不是,那我应该如何解决这个问题?我仍然必须能够通过 post 将数据发送到控制器,然后在处理数据后将其返回给视图。

【问题讨论】:

你是怎么寄的?您可以通过 ajax 发布一个复杂的对象,并且您的操作方法的响应(可能是视图结果)将返回到 ajax 调用的成功处理程序。如果你想导航到不同的页面,ajax 在这里可能不是正确的解决方案。做一个普通形式的帖子。 如果是object,您(或 MVC 绑定器)无法设置任何属性。也许dynamic 有效,或者为这些问题创建一个真实的课程。 您是将其作为普通提交还是使用 ajax 发布。如果正常提交,则不能使用数组。您必须对集合索引器使用正确的名称,例如,如果 POST 方法是 List&lt;QuestionModel&gt;,那么您将需要 [0].Choice: true[0].ChoiceQuestions[0].Id: 0 如果您想要进行正常的提交和重定向,则不清楚为什么要构建一个 javascript 对象数组 - 您不需要这样做,或者根本不需要任何 javascript)如果您已经生成了您的视图一开始就正确 如果您生成了正确的视图,那么可以正常提交。例如,请参阅this answer,了解如何为作为集合的模型(或包含作为集合的属性的模型)生成表单控件。或者,如果您在视图中动态添加集合项,请参阅 this answer 【参考方案1】:

您可以将任何对象的 Json 设置为单个隐藏表单字段,然后使用字符串参数发布表单以执行操作。然后在服务器端将 json 消毒到 action 方法内的对象 - 即使在另一个控制器中。您可以从控制器方法返回不同的视图。

Javascript(在股票页面/视图上说)

var form = document.createElement("form");
var input = document.createElement("input");
input.setAttribute("type", "hidden") ;
input.setAttribute("name", "outwardStocks") ;
input.setAttribute("value", JSON.stringify(selectedrecords));
form.appendChild(input);
document.body.appendChild(form);
form.action = "/CRM/Invoice/Index";
form.method = "post"
form.submit();

控制器代码(说发票控制器)

[HttpPost]
public IActionResult Index(string outwardStocks)

   InvoiceItems invItems = JsonSerializer.Deserialize<InvoiceItems>(outwardStocks);
   ......
   return View("Invoice" InvoiceVM);

【讨论】:

以上是关于将js复杂数组传给mvc控制器,然后返回另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器

如何将消息从我的存储库类返回到我的控制器,然后返回到我在 asp.net-mvc 中的视图?

ASP.NET MVC 中返回视图的 URL

使用 ASP.NET MVC 4 从控制器调用另一个不同的视图

用JS解析JS数组,然后传给PHP

将单元格数组项传递给另一个视图控制器