【问题标题】:Make json from post a string in controller通过在控制器中发布字符串来制作 json
【发布时间】:2019-11-21 15:37:32
【问题描述】:

大家好,我目前有一个我需要这张桌子的例子

<table class="table table-bordered" width="100%" cellspacing="0" id="tableID">
  <thead>
    <tr>
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th>D</th>
      <th>E</th>
    </tr>
    </thead>
    <tbody>
    <tr>
      <td align="center">val1</td>
      <td align="center">val2</td>
      <td align="center">val3</td>
      <td align="center">1500</td>
      <td align="center" class="myID"><input type="number" name="txtID" class="txtID" oninput="setValueAttr(this)" value="" min="0" max="1000"></td>
    </tr>
    <tr>
      <td align="center">val1</td>
      <td align="center">val2</td>
      <td align="center">val3</td>
      <td align="center">1500</td>
      <td align="center" class="myID"><input type="number" name="txtID" class="txtID" oninput="setValueAttr(this)"  value="" min="0" max="1000"></td>
    </tr>
    <tr>
      <td align="center">val1</td>
      <td align="center">val2</td>
      <td align="center">val3</td>
      <td align="center">1500</td>
      <td align="center" class="myID"><input type="number" name="txtID" class="txtID" oninput="setValueAttr(this)"  value="" min="0" max="1000" ></td>
    </tr>
  </tbody>
</table>
<form>
<button type="button" onclick="aplicar()">Aplicar</button>
</form>
<script>
function setValueAttr(el){
  el.setAttribute('value', el.value)
}

function aplicar(){
    var myTab = document.querySelectorAll('#tableID tbody tr .txtID:not([value=""])');
    var tableData = [];
    Array.from(myTab).forEach(input => {
      var tds = input.closest('tr').children;
      var obj = {};
      obj.A = tds[0].textContent;
      obj.B = tds[1].textContent;
      obj.C = tds[2].textContent;
      obj.D = tds[3].textContent;
      obj.E = input.value;
      tableData.push(obj);    
    });
        tableData = JSON.stringify({ 'tableData': tableData });
            $.ajax({
            url: '@comercial.Models.Base.DirectorioRaiz()Controller/View',
            type: 'post',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            data: tableData,
            success: function (response) {
                $('#divPagosAplicados').html(response);
            },
            error: function (error) {
                console.log(error);
            }
        });
}
</script>

我看到了一种在我的控制器中接收这个 json 的方法

public class tableData
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
    public string D { get; set; }
    public string E { get; set; }
}


public void View(List<tableData> tableDatas)
{
    var t = tableDatas;

}

但是我需要在我的控制器中执行与此 javascript 类似的操作。

var total = [];
for (i = 0; i < tableData.length; i++) {
    total[i] = "&num_operacion" + (i + 1) + "=" + tableData[i].A +
        "&monto" + (i + 1) + "=" + tableData[i].E +
        "&num_documento" + (i + 1) + "=" + tableData[i].B +
        "&tipo_documento" + (i + 1) + "=" + tableData[i].C
}

我已经使用那个 javascript 完成了这个并使用 post 发送字符串,但是如果字符串足够大,ajax 会崩溃

【问题讨论】:

  • 你是说 List tableDatas 在发布后没有被填充吗?
  • 基本上它的作用是这样的,如果我们在表格行的 txtbox 上输入一些东西,并且它没有超过最大值,它将被保存在一个数组中,然后我会将它 JSON.stringify 到将它作为 JSON 发布到我的控制器,我的控制器说它是 null :( 但在调试器中它命中了变量,无论如何我打算把这篇文章变成我的控制器内的字符串我该怎么做?编辑:好的,我注意到了我还没有在控制器中声明列表,这就是为什么它是 null 我正在弄清楚如何修复它 lol

标签: javascript c# ajax asp.net-mvc controller


【解决方案1】:

在您的操作方法中使用 [FromBody]ModelName 帮助器将其绑定到您的预期模型

public IActionResult([FromBody]List<MyModel> model)
{
............
}

【讨论】:

  • 嗯,我正在阅读如何使用 [FromBody],如果您有时间,您可以使用您的代码建议使用我的示例数据吗?
【解决方案2】:

需要做一个模型而不是在控制器里面做类所以..

模型.cs

    public class tableData
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
        public string D { get; set; }
        public string E { get; set; }
    }

并将控制器更改为此

        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public JsonResult Index(List<tableData> tableDatas)
        {
            List<string> total = new List<string>();

            for(int i = 0; i < tableDatas.Count(); i++)
            {
                total.Add($"&num_operacion{i+1}={tableDatas[i].A}&monto{i+1}={tableDatas[i].E}&num_documento{i + 1}={tableDatas[i].B}&tipo_documento{i + 1}={tableDatas[i].C}");
            }

            return Json(total);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多