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

时间:2017-11-20 15:41:16

标签: javascript c# arrays asp.net-mvc asp.net-mvc-4

这与我以前的question有关。 我想知道,我能以同样的方式传递一个JS数组(就像上一个问题中接受的答案),即使现在我正在尝试发送更复杂的数组: enter image description here

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

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将数据发送到控制器,然后在处理数据后将其返回到视图。

1 个答案:

答案 0 :(得分:0)

您可以将任何对象的 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);
}